从python中的列表创建新列表的最佳方法

时间:2015-12-13 00:43:29

标签: python list

如果我有列表a = [1, 2, 3],则此列表的总和为6.我想转换a来迭代它以便a = [1,1,1,1,1,1]

最好的方法吗?

3 个答案:

答案 0 :(得分:4)

您可以对元素求和并使用结果创建新列表:

>>> a = [1, 2, 3]
>>> a = [1] * sum(a)
>>> a 
[1, 1, 1, 1, 1, 1]

与使用迭代的解决方案相比,这是有效的,因为只需要一个内存分配。如果您的列表具有合理的大小,则在迭代中增加列表涉及多个内存分配。

答案 1 :(得分:0)

另一种方法是使用itertools.repeat,应该更有效率(如果a的总和非常大,如果直接生成所有项目,b的列表将非常大,但是这样我们使用迭代器,不要担心。),请注意,您只能使用它一次。

>>> from itertools import repeat
>>> a = [1, 2, 3]
>>> b = repeat(1, sum(a))
>>> type(b)
<type 'itertools.repeat'>
>>> list(b)
[1, 1, 1, 1, 1, 1]
>>> list(b)
[]

答案 2 :(得分:0)

另一种使用itertools的解决方案只能遍历原始列表一次。

>>> import itertools
>>> a = [1, 2, 3]
>>> [1 for i in itertools.chain.from_iterable(map(range, a))]
[1, 1, 1, 1, 1, 1]

生成器表达式中的range构造通常位于名为flatten的函数中。

创建列表可能不必要地复杂,但是当在for循环中使用时,它允许完全惰性的评估,这可能是有用的。