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]