您的位置:首页 > 其它

list的list重复操作问题([[]]*n)

2017-09-21 16:59 197 查看
  python 可以通过[var]*n 的方式复制列表中的值,如:

[1]*4 #得到[1,1,1,1]


  但是今天使用列表作为列表元素进行重复操作时遇到了问题:

def showResult(dataset,centrids,clusterAssment):
m,_ = shape(centrids)
xcord = [[]]*m;ycord=[[]]*m
n = shape(dataset)[0]
for i in range(n):
xcord[int(clusterAssment[i][0])].append(dataset[i][0])
ycord[int(clusterAssment[i][0])].append(dataset[i][1])
...


  上面的代码中我希望通过重复操作创建一个包含有m个list的list,但是当我对元素中的list进行append操作时如

a = [[]]*4
a[0].append(1)


  发现a中每一个list都append了一个1,上面的代码,现在a = [[1],[1],[1],[1]],但是其实我希望得到的结果是a = [[1],[],[],[]],细想了一下根据python的尿性,做重复操作时,作为元素的list并不是拷贝一份,而是同一个list的不同引用,所以对一个元素操作,其他元素也会被影响到。

  所以现在想生成不定个数list作为元素的list只能这样

x = [[] for i in range(m)]


  如果元素是数字,元素是被拷贝的,不会像list这样

x  = [1]*4
x[0] += 1
print x


  得到的结果是 [2,1,1,1]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: