Python append从列表中删除元素

时间:2019-11-13 12:14:41

标签: python

我有一个将列表追加到列表的函数,但是由于某种原因,该列表中的某些元素会被清除...

这是功能

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]但又删除了它?和其他人一样吗?我真的无法弄清楚为什么会这样...

1 个答案:

答案 0 :(得分:1)

当您处于while循环中时,基本上只能使用变量temp_location附加到列表path。对于该循环中的所有迭代,您附加的每个元素都引用同一对象。

因此,在外部while循环的一次迭代过程中,在for循环中进行了3次迭代,将导致3个元素追加到列表中,但每个元素都引用同一对象。

您可以通过在列表中附加temp_location的副本来避免这种情况:

path.append(temp_location.copy())