Когда я пытаюсь повернуть итератор, как в примере ниже, я получаю результаты, напечатанные дважды:
class TestIterator:
def __init__(self):
self.list = ['Alice', 'Bob', 'Charlie']
def __iter__(self):
self.idx = len(self.list) - 1
return self
def __next__(self):
try:
res = self.list[self.idx]
except IndexError:
raise StopIteration
self.idx -= 1
return res
names = TestIterator()
for name in names:
print(name)
Результат:
Charlie
Bob
Alice
Charlie
Bob
Alice
InВ результате выше, имена печатаются дважды.Я бы ожидал, что он будет печататься следующим образом:
Charlie
Bob
Alice
Однако, как ни странно, после того, как я немного поковырялся, я заметил, что если бы у меня было self.idx -= 2
, он печатал только один раз, но последовательностьвсе еще не так.Пример:
...
def __next__(self):
try:
res = self.list[self.idx]
except IndexError:
raise StopIteration
self.idx -= 2
return res
...
Это печатает:
Charlie
Alice
Bob
Я не понимаю, почему я должен минус 2 по индексу для правильной работы итератора.Почему так себя ведет?