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
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.
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.
Use the JavaScript continue statement to skip the current iteration of a loop and continue the next one.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With