如何使用出现 2 次的倍数的元素填充(追加)Python 中的列表

How to populate (append) list in Python with elements, that appear multiple of 2 times

假设我在 Python 中有一个包含 2 个元素 [[1 , 2], ...] 的列表。现在我需要得到这样的东西:

[2, 2] [2, 3] [3, 4] [3, 5] [3, 6] [3, 7]

第二个元素总是上升 1,第一个元素也是,但在上升之前出现 2^n (n>=1) 次。

接下来是第一个元素为 4 的 8 个列表,出现 8 次,列表的第二个元素将从 8 增加到 15。

听起来是个有趣的家庭作业。

如果您想要一个具有如下输出的函数:
[[1, 1], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6], [3, 7], [4, 8], [ 4、9]、[4、10]]

然后这个

def populate(n):
    left=1
    right=1
    temp=right*2
    output=[]
    for i in range(0,n):
        output.append([left,right])
        right+=1
        if(right==temp):
            left+=1
            temp=right*2
    return output

是众多方法之一。

如果你的意思是从一个列表开始,那么像这样的东西应该可以工作:

def populate(inputlist,n):
    left=inputlist[len(inputlist)-1][0]+1
    right=inputlist[len(inputlist)-1][1]+1
    temp=right*2
    for i in range(0,n):
        inputlist.append([left,right])
        right+=1
        if(right==temp):
            left+=1
            temp=right*2
    return inputlist 

也许你可以尝试像下面这样的嵌套 for 循环

def fn(n, x):
    for i in range(2, n+1):
        for j in range(2**(i-1), 2**i):
            x.append([i, j])
    return(x)

from math import log2,ceil
def fn(n,x): 
    [x.append([ceil(log2(i)),i-1]) for i in range(3,2**n+1)]
    return(x)

这样

>>> fn(3, [[1,2]])
[[1, 2], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6], [3, 7]]

>>> fn(4, [[1,2]])
[[1, 2], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6], [3, 7], [4, 8], [4, 9], [4, 10], [4, 11], [4, 12], [4, 13], [4, 14], [4, 15]]
from math import log
initial_list = [[1,2]]
def extend_pattern(initial_list,n):
    last_sublist = initial_list[-1]
    first_element = last_sublist[0]
    for i in range(n):
        last_sublist = list(last_sublist)
        if i != 0:
            last_sublist[1] += 1
        last_sublist[0] = first_element + int(log(i+2,2))
        initial_list.append(last_sublist)
extend_pattern(initial_list,10)
print(initial_list)       
#[[1, 2], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6], [3, 7], [4, 8], [4, 9], [4, 10], [4, 11]]