Je voulais juste poster une alternative qui pourrait être plus genearally utilisable. La plupart des solutions existantes utilisent un index de boucle pour éviter cela. Mais vous n'avez pas besoin d'utiliser un index - la clé ici est que contrairement à une boucle for, où la variable de boucle est cachée, la variable de boucle est exposée.
Vous pouvez faire des choses très similaires avec itérateurs/générateurs:
x = [1,2,3,4,5,6]
xi = iter(x)
ival = xi.next()
while not exit_condition(ival):
# Do some ival stuff
if ival == 4:
xi = iter(x)
ival = xi.next()
Ce n'est pas aussi propre, mais conserve toujours la possibilité d'écrire à la boucle iterator lui-même.
Habituellement, quand vous pensez que vous voulez faire cela, votre algorithme est faux, et vous devriez le réécrire plus proprement. Probablement ce que vous voulez vraiment faire est d'utiliser un générateur/coroutine à la place. Mais c'est au moins possible.
merci Perrow, pas beaucoup d'une personne python ... encore. – gnomed
Juste un rappel: avec une boucle while, assurez-vous que vous avez une condition de terminaison qui peut toujours être satisfaite. – Brandon
Je pense que cela se terminera quand i> = n – gnomed