我正在尝试以编程方式创建一个包含n
相同子列表的列表:
>>> pos = [10,20]
>>> 3 * pos
[10, 20, 10, 20, 10, 20]
但我想要的是[[10,20], [10,20], [10,20]]
有什么线索吗?
[[10, 20] for x in range(3)]
提防
[[10, 20]] * 3
因为它复制同一个列表 3 次
使用列表推导:
[[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
表达式之前的部分),并为外部列表中的每个索引创建一个新列表:
>>> lis = [[10, 20] for _ in range(3)]
>>> lis[0][0] = 'foo'
>>> lis
[['foo', 20], [10, 20], [10, 20]]
如果要使用存储在变量中的列表进行重复,请确保在每次迭代时创建一个副本:
[pos[:] for _ in range(3)]