Расширить список, повторяя отдельные элементы в Python - PullRequest
2 голосов
/ 11 апреля 2019

Есть ли более простой способ достичь нижеуказанного?

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

, что превращает [0,1,2] в [0,0,0,1,1,1,2,2,2]

Ответы [ 7 ]

4 голосов
/ 11 апреля 2019

Вы можете использовать список с двумя циклами:

>>> [elem for elem in range(3) for _ in range(repetitions)]
[0, 0, 0, 1, 1, 1, 2, 2, 2]
3 голосов
/ 11 апреля 2019

Использование 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]
0 голосов
/ 11 апреля 2019

Вы можете использовать.

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

Это должно быть быстрее, чем добавление списков.

0 голосов
/ 11 апреля 2019
print([ i for i in range(3) for j in range(3)])

Попробуйте это, это понимание вложенного списка, и всего одна строчка того, что вы там делаете.

0 голосов
/ 11 апреля 2019

Проще не знаю, но у 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>)
0 голосов
/ 11 апреля 2019

Одно решение с использованием 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]
0 голосов
/ 11 апреля 2019

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...