相同子列表的Python列表

时间:2013-07-08 08:03:25

标签: python list

我正在尝试以编程方式创建包含n个相同子列表的列表:

>>> pos = [10,20]
>>> 3 * pos
[10, 20, 10, 20, 10, 20]

但我想要的是[[10,20], [10,20], [10,20]]

任何线索?

2 个答案:

答案 0 :(得分:9)

[[10, 20] for x in range(3)]

小心

[[10, 20]] * 3

因为它复制了相同的列表3次

答案 1 :(得分:4)

使用列表理解:

[[10, 20] for _ in range(3)]

还可以选择使用乘法:

[[10, 20]] * 3   # or [pos] * 3

但是会创建一个包含3个对相同嵌套列表的引用的列表:

>>> lis = [[10, 20]] * 3
>>> lis[0][0] = 'foo'
>>> lis
[['foo', 20], ['foo', 20], ['foo', 20]]

通常不是你想要的。列表推导重新评估每个循环迭代的左侧表达式(for表达式之前的部分),并为外部列表中的每个索引创建 new 列表:

>>> lis = [[10, 20] for _ in range(3)]
>>> lis[0][0] = 'foo'
>>> lis
[['foo', 20], [10, 20], [10, 20]]

如果要使用存储在变量中的列表重复,请确保在每次迭代时创建副本

[pos[:] for _ in range(3)]