Вот базовая реализация без itertools:
class CyclicIterable:
def __init__(self, data):
self._data = list(data)
def __iter__(self):
while True:
yield from self._data
cycle = CyclicIterable(['a', 'b', 'c', 'd'])
for i, x in zip(range(5), cycle):
print(x)
Обратите внимание, что нет необходимости реализовывать __next__
, поскольку сам класс Cycle
, как и list
, , не является итератором. Чтобы явно извлечь из него итератор, вы пишете:
it = cycle.__iter__()
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
Конечно, вы можете создавать столько итераторов, сколько захотите.