Python 嵌套列表和For循环
考虑这一点:Python 嵌套列表和For循环,python,Python,考虑这一点: list = 2*[2*[0]] for y in range(0,2): for x in range(0,2): if x ==0: list[x][y]=1 else: list[x][y]=2 print list 结果: [[2,2],[2,2]] 为什么结果不是[[1,1],[2,2]]?因为您创建的列表是对同一子列表的两个引用 >>> L = 2*[2*[0]] >>> id(L[0]
list = 2*[2*[0]]
for y in range(0,2):
for x in range(0,2):
if x ==0:
list[x][y]=1
else:
list[x][y]=2
print list
结果:
[[2,2],[2,2]]
为什么结果不是[[1,1],[2,2]]?因为您创建的列表是对同一子列表的两个引用
>>> L = 2*[2*[0]]
>>> id(L[0])
3078300332L
>>> id(L[1])
3078300332L
因此,对L[0]的更改将影响L[1],因为它们是相同的列表
做你想做的事情通常的方法是
>>> L = [[0]*2 for x in range(2)]
>>> id(L[0])
3078302124L
>>> id(L[1])
3078302220L
请注意,L[0]和L[1]现在是不同的以节省空间:
>>> [[x,x] for x in xrange(1,3)]
是的!请改为尝试list=[[0,0],[0,0]]。我调试这个东西有一段时间了,但似乎没有什么意义。我添加了print语句,它输出了正确的值,但我没想到会是这样!