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