Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Skip multiple iterations in loop

I have a list in a loop and I want to skip 3 elements after look has been reached. In this answer a couple of suggestions were made but I fail to make good use of them:

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 

Four times continue is nonsense of course and using four times next() doesn't work.

The output should look like:

always look aside of life 
like image 483
Mehdi Nellen Avatar asked Mar 10 '14 09:03

Mehdi Nellen


People also ask

How do you skip iterations in the loop?

You can use the continue statement if you need to skip the current iteration of a for or while loop and move onto the next iteration.

How do you skip multiple iterations in Python?

When you want to skip n values, call next() n+1 times (don't forget to assign the value of the last call to something) and then "call" continue.

Which is used to skip the iteration?

Use the JavaScript continue statement to skip the current iteration of a loop and continue the next one.


1 Answers

for uses iter(song) to loop; you can do this in your own code and then advance the iterator inside the loop; calling iter() on the iterable again will only return the same iterable object so you can advance the iterable inside the loop with for following right along in the next iteration.

Advance the iterator with the next() function; it works correctly in both Python 2 and 3 without having to adjust syntax:

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] song_iter = iter(song) for sing in song_iter:     print sing     if sing == 'look':         next(song_iter)         next(song_iter)         next(song_iter)         print 'a' + next(song_iter) 

By moving the print sing line up we can avoid repeating ourselves too.

Using next() this way can raise a StopIteration exception, if the iterable is out of values.

You could catch that exception, but it'd be easier to give next() a second argument, a default value to ignore the exception and return the default instead:

song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] song_iter = iter(song) for sing in song_iter:     print sing     if sing == 'look':         next(song_iter, None)         next(song_iter, None)         next(song_iter, None)         print 'a' + next(song_iter, '') 

I'd use itertools.islice() to skip 3 elements instead; saves repeated next() calls:

from itertools import islice  song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] song_iter = iter(song) for sing in song_iter:     print sing     if sing == 'look':         print 'a' + next(islice(song_iter, 3, 4), '') 

The islice(song_iter, 3, 4) iterable will skip 3 elements, then return the 4th, then be done. Calling next() on that object thus retrieves the 4th element from song_iter().

Demo:

>>> from itertools import islice >>> song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] >>> song_iter = iter(song) >>> for sing in song_iter: ...     print sing ...     if sing == 'look': ...         print 'a' + next(islice(song_iter, 3, 4), '') ...  always look aside of life 
like image 73
Martijn Pieters Avatar answered Sep 30 '22 19:09

Martijn Pieters