我正在尝试使用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]]
我做错了什么?非常感谢你的帮助
答案 0 :(得分: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']]
答案 1 :(得分:1)
当你这样做时
x=[[0,0]]*10
您不是要创建10个不同的元素,而只是将引用复制到同一元素10次。你真正需要的是
x=[[i,0] for i in range(10)]
答案 2 :(得分: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]]