Python 列表问题[重复]
- 2025-02-14 09:50:00
- admin 原创
- 71
问题描述:
Python:
m=[[0]*3]*2
for i in range(3):
m[0][i]=1
print m
我希望此代码能够打印
[[1, 1, 1], [0, 0, 0]]
但它打印
[[1, 1, 1], [1, 1, 1]]
解决方案 1:
这是设计使然。当您对列表元素使用乘法时,您正在重现引用。
请参阅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]]
解决方案 2:
这有点棘手,但当你明白自己在做什么时,就会明白。当你执行此[[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]]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD