Skip multiple iterations in loop python -
i have list in loop , want skip 3 elements after look
has been reached. in this answer couple of suggestions made fail make use of them:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] sing in song: if sing == 'look': print sing continue continue continue continue print 'a' + sing print sing
four times continue
nonsense of course , using 4 times next()
doesn't work.
the output should like:
always aside of life
for
uses iter(song)
loop; can in own code , advance iterator inside loop; calling iter()
on iterable again return same iterable object can advance iterable inside loop for
following right along in next iteration.
advance iterator next()
function; works correctly in both python 2 , 3 without having adjust syntax:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] song_iter = iter(song) 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 print sing
line can avoid repeating ourselves too.
using next()
way can raise stopiteration
exception, if iterable out of values.
you catch exception, it'd easier give next()
second argument, default value ignore exception , return default instead:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] song_iter = iter(song) 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()
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) sing in song_iter: print sing if sing == 'look': print 'a' + next(islice(song_iter, 3, 4), '')
the islice(song_iter, 3, 4)
iterable skip 3 elements, return 4th, done. calling next()
on object retrieves 4th element song_iter()
.
demo:
>>> itertools import islice >>> song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life'] >>> song_iter = iter(song) >>> sing in song_iter: ... print sing ... if sing == 'look': ... print 'a' + next(islice(song_iter, 3, 4), '') ... aside of life
Comments
Post a Comment