首页 > 解决方案 > 为什么 list.append() 在此代码中写入数据

问题描述

我正在尝试将一些列表附加到 for 循环中的另一个列表,但似乎 append 方法正在覆盖列表的先前数据。

listFil1 = ["R1000", "D940", "L143", "D182", ...]

position1 = [0,0]

position1list = []

for i in range(0, len(listFil1)):
    #Get the move from each list
    move1 = listFil1[i]

    #evaluate position1
    if move1[0] == "R":
        position1[1] += int(move1[1:])
    elif move1[0] == "L":
        position1[1] -= int(move1[1:])
    elif move1[0] == "U":
        position1[0] += int(move1[1:])
    elif move1[0] == "D":
        position1[0] -= int(move1[1:])

    #Append each move, this is where the problem is
    position1list.append(position1)

如果我position1在 for 循环内打印,我会得到每次迭代的预期结果: * [0, 1000] * [-940, 1000] * [-940, 857] * [-1122, 857] * [-1122 , -20] * [-1831, -20] * [-1831, -273] * [-1583, -273] * [-1583, -574] * [-1149, -574] * [-1149, 267 ] * [-434, 267] * [-434, 968] * ... * [-1966, -12739] * [-1966, -13333]

但是当我在最后打印position1list时,在 for 循环之外,我得到了正确长度的数据,但列表中的每个项目都等于最后一个位置 1:[[-1966, -13333], [-1966, -13333 ], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333],...]

代码的哪一部分使附加写入整个列表?我可以更改什么以获得最后所有职位的列表?

标签: pythonpython-3.x

解决方案


您正在附加相同的列表引用,因此它们都具有相同的元素。每次追加时都应该做一个浅拷贝:

position1list.append(position1.copy())

推荐阅读