Как вывести элементы из списка несколько раз в Python?
Всем привет. Есть список:
['1_собака', '2_кошка', '3_попугай', '4_медведь']
Я хочу вывести в print что-то вроде:
'собака', 'кошка', 'попугай', 'медведь', 'собака', 'кошка', 'попугай', 'медведь', 'собака', 'кошка'
Делаю так:
listtest = ['1_собака', '2_кошка', '3_попугай', '4_медведь']
lgo = [listtest[i] for i in range(50)]
print(lgo)
И мне выдается ошибка: IndexError: list index out of range, что логично. Ведь количество элементов в списке доходит только до 3. Вопрос - как сделать, чтобы элементы начинали перебираться заново, если выходят за рамки нумерации?
Ответы (4 шт):
Автор решения: Эникейщик
→ Ссылка
Способ 1:
lgo = []
for i in range (50):
idx = 0
lgo.append(listtest[idx])
idx += 1
if idx == len(listtest):
idx = 0
Способ 2:
lgo = [listtest[i % len(listtest)] for i in range(50)]
Способ 3:
m = 50 // len(listtest) + 1
lgo = listtest * m
lgo = lgo[:50]
Автор решения: Алексей Р
→ Ссылка
4 способ - "бесконечное FIFO"
lst = ['собака', 'кошка', 'попугай', 'медведь']
for _ in range(50):
print(e := lst.pop(0))
lst.append(e)
собака
кошка
попугай
медведь
собака
кошка
попугай
...
Автор решения: TigerTV.ru
→ Ссылка
В одну строку:
any(map(lambda _: any(map(print, listtest)), range(5)))
в 2 строки:
for _ in range(5):
any(map(print, listtest))
Можно воспользоваться cycle:
from itertools import cycle
listtest = ['собака', 'кошка', 'попугай', 'медведь']
it = cycle(listtest)
for _ in range(50):
print(next(it))
Автор решения: SergFSM
→ Ссылка
с использованием модуля itertools это может выглядеть так:
from itertools import cycle, islice
l = ['собака', 'кошка', 'попугай', 'медведь']
list(islice(cycle(l),10))
>>> out
'''
['собака',
'кошка',
'попугай',
'медведь',
'собака',
'кошка',
'попугай',
'медведь',
'собака',
'кошка']