Расширить список, повторяя отдельные элементы в python

#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)
  

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