小编典典

创建重复N次的单项列表

all

我想创建一系列长度不同的列表。每个列表将包含相同的元素e,重复n次数(其中n= 列表的长度)。

如何创建列表,而不[e for number in xrange(n)]对每个列表使用列表推导?


阅读 97

收藏
2022-03-04

共1个答案

小编典典

你也可以写:

[e] * n

您应该注意,例如,如果 e 是一个空列表,您会得到一个包含 n 个对同一列表的引用的列表,而不是 n 个独立的空列表。

性能测试

乍一看,repeat 似乎 是创建具有 n 个相同元素的列表的最快方法:

>>> timeit.timeit('itertools.repeat(0, 10)', 'import itertools', number = 1000000)
0.37095273281943264
>>> timeit.timeit('[0] * 10', 'import itertools', number = 1000000)
0.5577236771712819

但是等等 - 这不是一个公平的测试......

>>> itertools.repeat(0, 10)
repeat(0, 10)  # Not a list!!!

该函数itertools.repeat实际上并没有创建列表,它只是创建一个对象,如果您愿意,可以使用该对象创建一个列表!让我们再试一次,但转换为列表:

>>> timeit.timeit('list(itertools.repeat(0, 10))', 'import itertools', number = 1000000)
1.7508119747063233

因此,如果您想要一个列表,请使用[e] * n. 如果要延迟生成元素,请使用repeat.

2022-03-04