Как я могу бесконечно зацикливать итератор в Python с помощью генератора или другого?Python

Программы на Python
Ответить
Anonymous
 Как я могу бесконечно зацикливать итератор в Python с помощью генератора или другого?

Сообщение Anonymous »

Насколько я понимаю, использование генератора — лучший способ добиться чего-то подобного, но я открыт для предложений.

В частности, один из вариантов использования таков: я хотел бы напечатать несколько элементов рядом с другим списком произвольной длины, усекая при необходимости начальный итератор.

Вот рабочий код Python, который демонстрирует именно тот пример поведения, который мне нужен:

Код: Выделить всё

    def loop_list(iterable):
"""
Return a Generator that will infinitely repeat the given iterable.

>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 11):
...     print i, l.next()
...
1 sam
2 max
3 sam
4 max
5 sam
6 max
7 sam
8 max
9 sam
10 max

>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 2):
...     print i, l.next()
...
1 sam
"""
iterable = tuple(iterable)
l = len(iterable)
num = 0
while num < l:
yield iterable[num]
num += 1
if num >= l:
num = 0
Проблема/Мой вопрос

Как вы могли заметить, это работает только со списками/кортежами/итерируемыми объектами. которые реализуют __getitem__ (если я не ошибаюсь). В идеале я хотел бы иметь возможность передавать любую итерацию и получать генератор, который может правильно перебирать ее содержимое.

Если есть лучший способ сделать что-то подобное без генератора, меня это тоже устраивает.

Подробнее здесь: https://stackoverflow.com/questions/129 ... r-or-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»