Supponiamo che io sono un ciclo for:Come cambiare l'indice di for loop in Python?
for i in range(1,10):
if i is 5:
i = 7
voglio cambiare i
se soddisfa determinate condizioni. Ho provato questo ma non ha funzionato. Come faccio?
Supponiamo che io sono un ciclo for:Come cambiare l'indice di for loop in Python?
for i in range(1,10):
if i is 5:
i = 7
voglio cambiare i
se soddisfa determinate condizioni. Ho provato questo ma non ha funzionato. Come faccio?
Per esempio particolare, questo sistema funziona:
for i in range(1, 10):
if i in (5, 6):
continue
Tuttavia, si sarebbe probabilmente meglio con un while
ciclo:
i = 1
while i < 10:
if i == 5:
i = 7
# other code
i += 1
Un ciclo for
assegna una variabile (in questo caso i
) al successivo elemento nell'elenco/iterabile all'inizio di ogni iterazione. Ciò significa che, indipendentemente da ciò che fai all'interno del ciclo, i
diventerà l'elemento successivo. Il ciclo while
non ha tale restrizione.
È questo l'unico modo? Sembra un po 'disordinato. – drum
@drum: volendo modificare manualmente l'indice di loop dall'interno del loop, ci si sente in disordine. – BrenBarn
Con un 'while', almeno, non lo confondiamo per un ciclo" regolare "che itera su un intervallo che promette di ripetere. –
Questo concetto non è insolito nel mondo C, ma dovrebbe essere evitato se possibile. Tuttavia, questo è il modo in cui l'ho implementato, in un modo in cui sentivo che era chiaro cosa stava succedendo. Poi si può mettere la vostra logica per il salto in avanti nell'indice qualsiasi punto all'interno del ciclo, e un lettore di saprete di prestare attenzione alla variabile di salto, mentre incorporando un i = 7 qualche parte nel profondo può facilmente perdere:
skip = 0
for i in range(1,10):
if skip:
skip -= 1
continue
if i=5:
skip = 2
<other stuff>
Anche se saltare è un'opzione, non è sicuramente la risposta appropriata a questa domanda.Secondo la domanda, si dovrebbe anche poter andare avanti e indietro in un ciclo. La risposta accettata ha affrontato questo problema con un ciclo di tempo. – drum
Un po 'più di informazioni sul perché il ciclo nella domanda non funziona come previsto.
Un ciclo
for i in iterable:
# some code with i
è fondamentalmente un'abbreviazione per
iterator = iter(iterable)
while True:
try:
i = next(iterator)
except StopIteration:
break
# some code with i
Così il ciclo for
estrae i valori da un iteratore costruito da quello iterable per uno e automaticamente riconosce quando che iteratore esausto e si ferma.
Come si può vedere, in ogni iterazione del ciclo while
i è riassegnata, quindi il valore di i
verrà sostituita indipendentemente da qualsiasi altra riassegnazioni si immette nella parte # some code with i
.
Per questo motivo, for
loop in Python non sono adatti per le modifiche permanenti alla variabile del ciclo e si dovrebbe ricorrere a un ciclo while
invece, come è già stato dimostrato in risposta di volatilità.
Usa un ciclo 'while', invece di' is' usa '=='. –
Perché si desidera modificare l'indice di iterazione? Questo è decisamente un odore. –
Sto scrivendo qualcosa come un interprete di codice assembly. Quindi devo passare a certe istruzioni a causa della mia implementazione. – drum