嵌套列表和For循环

时间:2011-04-21 06:10:06

标签: 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]]?

2 个答案:

答案 0 :(得分:12)

因为您创建的列表是对同一子列表的两次引用

>>> 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]现在是不同的

答案 1 :(得分:0)

另外节省空间:

>>> [[x,x] for x in xrange(1,3)]