即使条件不为真,列表值也会在if语句中更新

时间:2013-12-13 04:13:45

标签: python

我试图在矩阵中扫描特定索引(firstCord)的八个相邻索引,并查找其中任何一个邻居是否存在于包含一些随机坐标的另一个列表(Cord)中作为元素。如果Cord列表中存在任何邻居,那么我会将该特定坐标附加到Temp_Cord列表中。代码段如下所示。

当第一次满足Temp_Cord条件时,我可以看到newCord附加了if newCord in Cord:值。这是预期的行为。但Temp_Cord中的附加值会根据newCord中的更改而在每个其他迭代中发生更改,类似于Temp_Cord[0]newCord共享相同的内存。有人可以帮我解决这个问题。仅当Temp_Cord条件为真时,我才需要在newCord值附加if newCord in Cord:

先谢谢。

Cordlen = len(Cord)
orientation = [(-1,0), (-1,1), (0,1), (1,1), (1,0), (1,-1),(0,-1),(-1,-1)]
firstCord = [0,173]
Temp_Cord = []
while ((Arrlen) < Cordlen):

    newCord = [0,0]   

    for i in orientation:
        newCord[0] = firstCord[0] + i[0]
        newCord[1] = firstCord[1] + i[1]

        if newCord in Cord:
            Temp_Cord.append(newCord)

    Arrlen = len (Temp_Cord) 

1 个答案:

答案 0 :(得分:5)

您一遍又一遍地追加相同的列表

为什么不直接使用这样的tuple

for i in orientation:
    newCord = firstCord[0] + i[0], firstCord[1] + i[1]

或者如果它需要是list - 每次都要新建一个

for i in orientation:
    newCord = [firstCord[0] + i[0], firstCord[1] + i[1]]