嵌套列表和for循环

3 投票
2 回答
1671 浏览
提问于 2025-04-16 16:09

考虑一下这个:

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

另外,如果想节省空间:

>>> [[x,x] for x in xrange(1,3)]
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] 是不同的了。

撰写回答