Il modo migliore è assegnare all'iteratore un nome: è comune avere un iteratore in contrapposizione a un iteratore (la differenza essendo un iterabile, ad esempio un elenco, inizia dall'inizio ogni volta che si itera su di esso). In questo caso, basta usare the iter()
built-in function:
numbers = iter(range(100))
Quindi è possibile avanzare all'interno del ciclo utilizzando il nome. Il modo migliore per farlo è con the itertools
consume()
recipe - poiché è veloce (usa le funzioni itertools
per garantire che l'iterazione avvenga nel codice di basso livello, rendendo il processo di consumo dei valori molto veloce ed evita di utilizzare la memoria memorizzando i valori consumati):
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)
In questo modo, si può fare qualcosa di simile:
numbers = iter(range(100))
for i in numbers:
...
if some_check(i):
consume(numbers, 3) # Skip 3 ahead.
fonte
2013-07-24 14:46:20
Ho pensato che potrebbe essere il caso, mentre i cicli sono solo triste però. –
Finito comunque di andare con il ciclo while! Grazie mille! –
@AlexS Se si sta iterando su numeri, va bene - se si utilizzano quei numeri come indici per elenchi o qualsiasi altra cosa, si prega di non farlo. L'iterazione per indice è cattiva in ogni modo. –