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

  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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值