创建列表n列表副本

时间:2014-07-04 13:15:51

标签: python list copy

我需要一个列表列表,其中手动输入前两个子列表,但第三个列表是第五个列表是彼此的副本。我怎么能做三次写同一个列表的技巧?这个例子不是我想要的,而是产生第三个子列表,它是我需要的三倍:

examplelist=[[1,2],[3,4],3*[5,6,7]]
>>>[[1, 2], [3, 4], [5, 6, 7, 5, 6, 7, 5, 6, 7]]

我想:

>>>[[1, 2], [3, 4], [5, 6, 7], [5, 6, 7], [5, 6, 7]]

4 个答案:

答案 0 :(得分:3)

你可能最好以直截了当的方式做到这一点:

l = [[1, 2], [3, 4]]
l.extend([5, 6, 7] for _ in range(3))

如果您将列表列表([[5, 6, 7]] * 3 == [[5, 6, 7], [5, 6, 7], [5, 6, 7]])相乘,则最终会将三个引用添加到同一列表

答案 1 :(得分:0)

有两种方式:

>>> [[1,2],[3,4]] + [[5,6,7]]*3
[[1, 2], [3, 4], [5, 6, 7], [5, 6, 7], [5, 6, 7]]

>>> examplelist=[[1,2],[3,4]]
>>> examplelist.extend([[5,6,7]]*3)
>>> examplelist
[[1, 2], [3, 4], [5, 6, 7], [5, 6, 7], [5, 6, 7]]

但请注意,列表中的最后3个列表将是相同的:

>>> examplelist[-1][0] = 100
>>> examplelist
[[1, 2], [3, 4], [100, 6, 7], [100, 6, 7], [100, 6, 7]]

可能不是你想要的。

答案 2 :(得分:0)

Python将添加列表以获得您期望的内容:

>>> examplelist=[[1,2],[3,4]]
>>> n=3
>>> examplelist+=[[5,6,7] for i in range(n)]
>>> examplelist
[[1, 2], [3, 4], [5, 6, 7], [5, 6, 7], [5, 6, 7]]

您还可以创建一次性描述的结构,因为在构造列表时会计算表达式:

>>> li=[[1,2,3]] + [[5,6,7] for i in range(n)] + [[7,8,9]]
>>> li
[[1, 2, 3], [5, 6, 7], [5, 6, 7], [5, 6, 7], [7, 8, 9]]

答案 3 :(得分:-1)

这应该有效:

>>> from itertools import repeat
>>> ex = [ [1,2], [3,4] ]
>>> ex.extend(repeat([5, 6, 7], 3))
>>> ex
>>> [[1, 2], [3, 4], [5, 6, 7], [5, 6, 7], [5, 6, 7]]