Considerare:comportamento lista Python iteratore e il prossimo (iterator)
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Così, avanzando l'iteratore è, come previsto, gestita da una mutazione che lo stesso oggetto.
Stando così, mi aspetto:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
per saltare ogni secondo elemento: la chiamata a next
dovrebbe avanzare l'iteratore volta, la chiamata implicita fatta dal ciclo deve avanzare una seconda volta - e il risultato di questa seconda chiamata verrà assegnato a i
.
Non funziona. Il ciclo stampa tutti gli articoli degli elementi nell'elenco, senza saltare nessuno.
Il mio primo pensiero è che questo potrebbe accadere perché il ciclo chiama iter
su ciò che è passato, e questo potrebbe dare un iteratore indipendente - questo non è il caso, come abbiamo iter(a) is a
.
Quindi, perché non sembra che next
avanzi l'iteratore in questo caso?
Non ero a conoscenza di questo comportamento dall'interprete. Sono contento di averlo scoperto prima di perdere un sacco di tempo a chiedermelo mentre risolvo qualche problema reale. – brandizzi
... \ * dies *. Il peggio è che posso ricordare di aver menzionato esattamente questo comportamento di interprete a qualcuno, forse una settimana fa. – lvc
interessante. Ho provato per i in a: next (a); print i e ho pensato di saltare a 1 e stampare 1,3,5,7,9. Ma ancora è 0,2,4,6,8. Perché? – user2290820