python 中的 append 方法在嵌套 for 循环中未按预期工作

append method in python not working as expected in nested for loops

我想使用嵌套 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]]

只需将数字更改为数字[:],您就会得到预期的输出。

ls.append(numbers) 表示您正在附加列表的引用。 所以当列表改变时,所有实例都会改变。 当你这样做时 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()

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

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)

你可以这样做:

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

如果您 运行 您在 http://pythontutor.com/ 上的代码,那么您会看到

列表 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])