是否有更简单的方法来实现以下目标?
lst = []
repetitions = 3
for elem in range(3):
lst += [elem] * repetitions
这会将[0,1,2]变成[0,0,0,1,1,1,2,2,2]
答案 0 :(得分:4)
您可以将list comprehension与两个循环一起使用:
>>> [elem for elem in range(3) for _ in range(repetitions)]
[0, 0, 0, 1, 1, 1, 2, 2, 2]
答案 1 :(得分:3)
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]
答案 2 :(得分:0)
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]
答案 3 :(得分:0)
使用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]
答案 4 :(得分:0)
我不知道更简单,但是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>)
答案 5 :(得分:0)
print([ i for i in range(3) for j in range(3)])
尝试一下,这是嵌套列表理解,只需一行即可完成。
答案 6 :(得分:0)
您可以使用。
lst = []
repetitions = 3
for elem in range(2):
for _ in range(elem+1):
lst.append(elem)
这应该比添加列表更快。