Лучший способ - присвоить итератору имя - обычно имеет итерабельность, в отличие от итератора (различие, являющееся итерабельным - например, список - начинается с начала каждый раз, когда вы перебираете его). В этом случае, просто использовать the iter()
built-in function:
numbers = iter(range(100))
Затем вы можете продвигать его в цикле, используя имя. Лучший способ сделать это - the itertools
consume()
recipe - так как он работает быстро (он использует функции itertools
, чтобы гарантировать, что итерация происходит в низкоуровневом коде, что делает процесс потребления значений очень быстрым и позволяет избежать использования памяти, сохраняя потребляемые значения):
from itertools import islice
import collections
def consume(iterator, n):
"Advance the iterator n-steps ahead. If n is none, consume entirely."
# Use functions that consume iterators at C speed.
if n is None:
# feed the entire iterator into a zero-length deque
collections.deque(iterator, maxlen=0)
else:
# advance to the empty slice starting at position n
next(islice(iterator, n, n), None)
делая это, вы можете сделать что-то вроде:
numbers = iter(range(100))
for i in numbers:
...
if some_check(i):
consume(numbers, 3) # Skip 3 ahead.
Я подумал, что может быть, в то время как петли просто грустно, хотя. –
В любом случае закончен с циклом while! Благодаря тонну! –
@AlexS Если вы итерируете по номерам, это нормально - если вы используете эти числа в качестве индексов для списков или чего-то еще, не делайте этого. Итерация по индексу плоха во всех отношениях. –