我试图将一些列表附加到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)
如果我在for循环中打印position1
,我会得到每个迭代的预期结果:
* [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年]
但是,当我在for循环之外的末尾打印position1list
时,我得到了正确长度的数据,但是列表中的每一项都等于最后一个位置1:
[[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、[-1966,-13333]、…]
代码的哪一部分使append覆盖整个列表? 我可以改变什么来得到最后所有职位的列表
在所有迭代中都使用相同的
position1
对象,然后在position1list
中对同一列表进行多个引用。您需要在每次迭代中重新声明您的列表以创建一个唯一的对象您的问题的简单演示如下:
如您所见,因为我们多次创建了一个带有
l
的列表,所以添加到l
会更改整个a
列表这是因为变量
position1
不直接包含数组,而是包含对数组的引用。这意味着,如果将数组赋给另一个变量,并且修改其中一个变量,则这两个变量都将被修改示例:
因此,要处理此问题,您应该复制数组:
您附加了相同的列表引用,因此它们都具有相同的元素。每次附加以下内容时,应制作一个浅拷贝:
相关问题 更多 >
编程相关推荐