Sauter plusieurs itérations dans la boucle python
J'ai une liste dans une boucle et je veux sauter 3 éléments après look
a été atteint.
Dans cette réponse un couple de suggestions ont été faites, mais je n'arrive pas à en faire bon usage:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
for sing in song:
if sing == 'look':
print sing
continue
continue
continue
continue
print 'a' + sing
print sing
Quatre fois continue
est absurde, bien sûr, et à l'aide de quatre fois next()
ne fonctionne pas.
La sortie doit ressembler à:
always
look
aside
of
life
next()
trois reprises, ce qui devrait bien fonctionner, aussi longtemps que vous parcoureziter(song)
.
Vous devez vous connecter pour publier un commentaire.
for
utiliseiter(song)
à boucle; vous pouvez le faire dans votre propre code, puis avance l'itérateur à l'intérieur de la boucle; appeliter()
sur l'objet iterable de nouveau uniquement retourner le même objet itérable de sorte que vous pouvez l'avance l'objet iterable à l'intérieur de la boucle avecfor
suite à droite dans la prochaine itération.Avance l'itérateur avec le
next()
function; il fonctionne correctement en Python 2 et 3, sans avoir à ajuster la syntaxe:En déplaçant le
print sing
ligne, nous pouvons éviter de nous répéter trop.À l'aide de
next()
de cette façon peut élever unStopIteration
exception, si l'itérable est hors de valeurs.Vous pourriez attraper cette exception, mais il serait plus simple de donner
next()
un deuxième argument, une valeur par défaut à ignorer l'exception et de retourner la valeur par défaut à la place:J'utiliserais
itertools.islice()
pour sauter 3 éléments au lieu; enregistre répéténext()
appels:La
islice(song_iter, 3, 4)
itérable va sauter 3 éléments, puis revenir à la 4ème, puis être fait. L'appel denext()
sur cet objet récupère ainsi le 4e élément desong_iter()
.Démo:
Je pense, c'est juste bien d'utiliser les itérateurs et
next
ici:ou, avec la gestion des exceptions (qui est plus courte ainsi que plus robuste que @Steinar remarqué):
['always', 'look', '', 'the']
ou['always', 'look', None, 'the']
)Bien sûr, vous pouvez utiliser trois fois suivante (ici, j'ai fait faire quatre temps)
Puis
Fait, à l'aide .next() trois fois n'est pas absurde. Lorsque vous voulez sauter le n valeurs, appel à next() n+1 fois (n'oubliez pas d'affecter la valeur du dernier appel à quelque chose) et puis sur "appel" continuer.
Pour obtenir une réplique exacte du code que vous avez posté le:
Vous pouvez le faire sans une iter() tout simplement à l'aide d'une variable supplémentaire: