繁体   English   中英

通过在python中重复单个元素来扩展列表

[英]Extend list by repeating individual elements in python

有没有更简单的方法来实现以下目标?

lst = []
repetitions = 3
for elem in range(3):
    lst  += [elem] * repetitions

这将[0,1,2]变成[0,0,0,1,1,1,2,2,2]

您可以使用带有两个循环的列表推导:

>>> [elem for elem in range(3) for _ in range(repetitions)]
[0, 0, 0, 1, 1, 1, 2, 2, 2]

使用list comprehension

print([item for item in lst for i in range(3)])

使用numpy.repeat

lst = [0,1,2]
print(list(np.repeat(lst,3)))

输出

[0, 0, 0, 1, 1, 1, 2, 2, 2]
[0, 0, 0, 1, 1, 1, 2, 2, 2]

itertools是你的朋友:

>>> list(itertools.chain.from_iterable(itertools.repeat(i, 3) for i in range(1, 4)))
[1, 1, 1, 2, 2, 2, 3, 3, 3]

一个使用itertools.chain解决方案

from itertools import chain
print(list(chain.from_iterable(([x]*3 for x in [0,1,2]))))
#[0, 0, 0, 1, 1, 1, 2, 2, 2]

我不知道更容易,但是itertools repeat ,所以

lst = [r for e in <items to repeat> for r in repeat(e, repetitions)

要么

lst = list(chain.from_iterable(repeat(e, repetitions) for e in <items to repeat>)
print([ i for i in range(3) for j in range(3)])

试试这个,这是嵌套列表理解,只有一行几乎就是你在那里做的。

您可以使用。

lst = []
repetitions = 3
for elem in range(2):
   for _ in range(elem+1):
       lst.append(elem)

这应该比添加列表更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM