Python 如何迭代具有重复值的列表?

Python 如何迭代具有重复值的列表?,python,python-3.x,list,memory-management,list-comprehension,Python,Python 3.x,List,Memory Management,List Comprehension,这可能是一个非常基本的问题,但我不知道我必须搜索什么才能找到答案: 我有以下代码: list = [[0,1],[0,2],[1,3],[1,4],[1,5]] list.append(list[0]) for i in list: i.append(0) print(list) 此列表稍后将用作曲线的坐标。我需要复制末端的第一个坐标以获得闭合曲线 如果我想给列表中的每个坐标添加第三个值,列表中的第一个和最后一个项目将迭代两次: [[0, 1, 0, 0], [0, 2, 0],

这可能是一个非常基本的问题,但我不知道我必须搜索什么才能找到答案:

我有以下代码:

list = [[0,1],[0,2],[1,3],[1,4],[1,5]]

list.append(list[0])

for i in list:
    i.append(0)

print(list)
此列表稍后将用作曲线的坐标。我需要复制末端的第一个坐标以获得闭合曲线

如果我想给列表中的每个坐标添加第三个值,列表中的第一个和最后一个项目将迭代两次:

[[0, 1, 0, 0], [0, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [0, 1, 0, 0]]
我猜它们具有相同的内存地址,因此,append函数在第一个索引和最后一个索引中分别应用于该地址处的同一对象

这种现象叫什么?获得以下列表的最简单方法是:

[[0, 1, 0], [0, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [0, 1, 0]]

感谢您的帮助

您可以做一个列表:

list = [[0,1],[0,2],[1,3],[1,4],[1,5]]

list.append(list[0])
list = [x + [0] for x in list]

print(list)
# [[0, 1, 0], [0, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [0, 1, 0]]
编辑:这里的技巧是,在列表中使用x+[0]。这样就创建了新的列表,因此您不会将0附加到同一个列表中两次Hattip到@dx_over_dt

您的方法存在的问题是,列表的第一个和最后一个元素引用的是同一个对象。当您为每次迭代打印i和列表时,您可以看到:

for i in list:
     i.append(0)
     print(i)
     print(list)
因此,对于循环中的第一个和最后一个i,您将在同一个列表中附加一个0。 您可以坚持使用附加第一个元素副本的方法:

list.append(list[0].copy())

最简单的答案是在附加结束点之前添加0

列表=[[0,1],[0,2],[1,3],[1,4],[1,5]] 对于列表中的i: i、 附录0 list.appendlist[0] 打印列表
它比列表理解更有效,因为它不会复制元素。

这很有效,谢谢。然而,我认为列表理解只是编写循环的一种更有效的方法。但是迭代的方式不同吗?同样,列表理解将生成新对象,这就是为什么它工作正常。我明白了,非常感谢!好了,因为+运算符,它只生成新对象。[x代表列表中的x]我相信不会创建新对象。如果您有一个附加元素并返回列表的函数,而不是使用+,我相信您的行为将与for循环相同。就这点而言,您原来的For循环可以在rangelenlist中为i执行:list[i]=list[i]+[0]这是正确的,但是,在我的实际代码中,追加发生在不同的位置,因为我还需要没有第三个值的坐标,但第一个项在末尾。