#python #list
#python #Список
Вопрос:
Есть ли более простой способ добиться приведенного ниже?
lst = []
repetitions = 3
for elem in range(3):
lst = [elem] * repetitions
это превращает [0,1,2] в [0,0,0,1,1,1,2,2,2]
Комментарии:
1. Кроме того, используя
itertools.chain
, вы можете сделать:list(chain.from_iterable([[x]*3 for x in [0,1,2]]))
2. Вместо этого вы должны получать
[0, 0, 0, 1, 1, 1]
.
Ответ №1:
Используя 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]
Ответ №2:
Вы могли бы использовать понимание списка с двумя циклами:
>>> [elem for elem in range(3) for _ in range(repetitions)]
[0, 0, 0, 1, 1, 1, 2, 2, 2]
Ответ №3:
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]
Ответ №4:
Одно из решений с использованием 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]
Ответ №5:
Я не знаю, как проще, но у 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>)
Ответ №6:
print([ i for i in range(3) for j in range(3)])
Попробуйте это, это понимание вложенного списка, и только одна строка в значительной степени соответствует тому, что вы там делаете.
Ответ №7:
Вы можете использовать.
lst = []
repetitions = 3
for elem in range(2):
for _ in range(elem 1):
lst.append(elem)
Это должно быть быстрее, чем добавление списков.