python中的append方法在嵌套for循环中无法正常工作

2024-04-26 06:57:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用嵌套for循环将一个列表附加到另一个列表中,但代码没有按预期工作

def apend():
    ls = []
    numbers = [0,0]
    
    for num1 in range(3):
        for num2 in range(2):
            numbers[0] = num1
            numbers[1] = num2
            ls.append(numbers)
    print(ls)

apend()

我希望输出是:[[0,0],[0,1],[0,2],1,0],[1,1],[1,2]]

但是我得到了这个输出:[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]


Tags: 代码in列表fordefrangelsprint
3条回答

如果在http://pythontutor.com/上运行代码,则会看到

enter image description here

列表ls中的所有元素都保持对同一列表numbers的引用,这就产生了问题

您必须在for-loop内创建新的列表numbers = [0,0]

for num1 in range(3):
    for num2 in range(2):
        numbers = [0,0]
        numbers[0] = num1
        numbers[1] = num2
        ls.append(numbers)

或者干脆不做numbers

for num1 in range(3):
    for num2 in range(2):
        ls.append([num1, num2])

只需将数字更改为数字[:],您将获得预期的输出

ls.append(numbers)表示您正在添加列表的引用。 因此,当列表更改时,所有Instance都会更改。 当您执行ls.append(numbers[:])操作时,会附加一个数字副本

def apend():
    ls = []
    numbers = [0,0]
    
    for num1 in range(3):
        for num2 in range(2):
            numbers[0] = num1
            numbers[1] = num2
            ls.append(numbers[:])
    print(ls)

apend()

您正在循环中添加名为number的列表。 只需添加一个新的列表对象,如下所示

def apend():
    ls = []
    numbers = [0,0]
    
    for num1 in range(3):
        for num2 in range(2):
            numbers[0] = num1
            numbers[1] = num2
            ls.append(list(numbers)) # append a new list object 
    print(ls)

顺便说一下,我想用列表理解这个函数

def append():
    ls = [[x, y] for x in range(3) for y in range(2)]
    print(ls)

相关问题 更多 >