我正在尝试在 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]]
我究竟做错了什么?非常感谢你的帮助
这是你想要做的吗?
>>> [[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']]
当你这样做
x=[[0,0]]*10
您不是在创建 10 个不同的元素,而是简单地将引用复制到同一元素 10 次。你真正需要的是
x=[[i,0] for i in range(10)]
用这个,
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]]