我有一个将列表追加到列表的函数,但是由于某种原因,该列表中的某些元素会被清除...
这是功能
def calculate_path(current_location, furthest):
path = []
directions = [[0, -1], [1, 1], [0, 1], [1, -1]]
i = 0
for direction in furthest: # n e s w
temp_location = copy.deepcopy(current_location)
while temp_location != direction:
temp_location[directions[i][0]] += directions[i][1]
path.append(temp_location)
print(path)
i += 1
return path
因此,给定current_location = [4, 4]
,furthest = [[1, 4], [4, 7], [5, 4], [4, 0]]
的输入,程序将给出以下输出:
[[3, 4]]
[[2, 4], [2, 4]]
[[1, 4], [1, 4], [1, 4]]
[[1, 4], [1, 4], [1, 4], [4, 5]]
[[1, 4], [1, 4], [1, 4], [4, 6], [4, 6]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7], [5, 4]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7], [5, 4], [4, 3]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7], [5, 4], [4, 2], [4, 2]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7], [5, 4], [4, 1], [4, 1], [4, 1]]
[[1, 4], [1, 4], [1, 4], [4, 7], [4, 7], [4, 7], [5, 4], [4, 0], [4, 0], [4, 0], [4, 0]]
如您所见,它添加了[3, 4]
但又删除了它?和其他人一样吗?我真的无法弄清楚为什么会这样...
答案 0 :(得分:1)
当您处于while
循环中时,基本上只能使用变量temp_location
附加到列表path
。对于该循环中的所有迭代,您附加的每个元素都引用同一对象。
因此,在外部while
循环的一次迭代过程中,在for
循环中进行了3次迭代,将导致3个元素追加到列表中,但每个元素都引用同一对象。
您可以通过在列表中附加temp_location
的副本来避免这种情况:
path.append(temp_location.copy())