0

我正在尝试在 Python 中定义一个带有循环的列表列表。我想构建以下列表:

x=[[0,0],[1,0],[2,0],...,[9,0]]

这基本上是我所做的:

x=[[0,0]]*10
for i in range(10):
    x[i][0]=i
print x

但是,我最终得到以下列表:

x=[[9,0],[9,0],[9,0],...,[9,0]]

我究竟做错了什么?非常感谢你的帮助

4

3 回答 3

1

这是你想要做的吗?

>>> [[i, 0] for i in range(10)]
[[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0]]

您所做的错误在于您正在创建一个列表,然后通过使用*您并没有创建更多,您只是对它进行了更多引用,这意味着每次更改列表时,您都在更改每次都有相同的列表。

>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append('X')
>>> a
[['X'], ['X'], ['X'], ['X'], ['X'], ['X'], ['X'], ['X'], ['X'], ['X']]
于 2013-11-11T12:08:05.420 回答
1

当你这样做

x=[[0,0]]*10

您不是在创建 10 个不同的元素,而是简单地将引用复制到同一元素 10 次。你真正需要的是

x=[[i,0] for i in range(10)]
于 2013-11-11T12:08:40.533 回答
0

用这个,

a=[[0,i] for i in range(10)]
print a

输出是这样的:

[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9]]
于 2013-11-11T12:12:37.050 回答