为了账号安全,请及时绑定邮箱和手机立即绑定

Python列表问题

Python列表问题

白衣染霜花 2019-07-25 14:56:29
Python列表问题蟒蛇:m=[[0]*3]*2for i in range(3):    m[0][i]=1print m我希望这段代码可以打印出来[[1, 1, 1], [0, 0, 0]]但它打印出来[[1, 1, 1], [1, 1, 1]] 
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

这是设计的。当您对列表的元素使用乘法时,您将再现引用。

请参阅Python编程/列表wikibook上的“列表创建快捷方式”部分,其中详细介绍了对可变对象的列表引用的问题。

他们推荐的解决方法是列表理解:

>>> s = [[0]*3 for i in range(2)]

>>> s

[[0, 0, 0], [0, 0, 0]]

>>> s[0][1] = 1

>>> s

[[0, 1, 0], [0, 0, 0]]


查看完整回答
反对 回复 2019-07-25
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这有点恶魔,但是当你明白自己在做什么时,这一点非常明显。当你做这个时[[0]*3]*2,你首先要创建一个包含3个零的列表,然后你复制它以制作两个元素。但是,当您执行该复制时,不会创建具有相同内容的新列表,而是多次引用相同的列表。所以当你换一个时,它们都会改变。


一个例子来突出它:


In [49]: s = [[]]*2 # Create two empty lists


In [50]: s # See: 

Out[50]: [[], []]


In [51]: s[0].append(2) # Alter the first element (or so we think)


In [52]: s # OH MY, they both changed! (because they're the same list!)

Out[52]: [[2], [2]]


查看完整回答
反对 回复 2019-07-25
  • 2 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信