列表附加不起作用

时间:2014-05-14 18:06:37

标签: python list append

所以我有类似的东西:

listPoints=[]
for x in range(100):
    for y in range(10):
        point[0]=x
        point[1]=y
        point[2] = num_cluster
        listPoints.append(point)
print listPoints

当我打印listPoints时,列表只包含最后一次迭代的值......我做错了什么?我没有看到它

2 个答案:

答案 0 :(得分:2)

当您追加point时,您没有添加point数组的副本 - 您正在添加对它的引用。因此,当您执行listPoints.append(point)时,您实际上每次都会向完全相同的内容添加完全相同的引用。因此,当您更改point时,似乎listPoints中的每个元素也会发生变化。

您可以通过创建列表来解决问题:

listPoints=[]
for x in range(100):
    for y in range(10):
        point = [x, y, num_cluster]
        listPoints.append(point)
print listPoints

...或者通过复制它,如果你绝对必须:

import copy

listPoints=[]
for x in range(100):
    for y in range(10):
        new_point = copy.deepcopy(point)
        new_point[0]=x
        new_point[1]=y
        new_point[2] = num_cluster
        listPoints.append(new_point)
print listPoints

答案 1 :(得分:0)

假设您的point是一个列表,则需要append(point[:])附加point的副本,而不是列表的引用。

如果point是其他一些迭代或用户定义,您可能需要模块copy来进行浅或深拷贝。