Skip iterations in enumerated list object (python)

pidgey picture pidgey · Jan 25, 2015 · Viewed 12.3k times · Source

I have the code

for iline, line in enumerate(lines):
    ...
    if <condition>:
        <skip 5 iterations>

I would like, as you can read, have the for loop skip 5 iterations if the condition is met. I can be sure that, if the condition is met, there are 5 or more objects left in the "lines" object.

lines exists of an array of dictionaries, which have to be looped over in order

Answer

Padraic Cunningham picture Padraic Cunningham · Jan 25, 2015
iline = 0
while iline < len(lines):
    line = lines[iline]
    if <condition>:
        place_where_skip_happened = iline
        iline += 5
    iline += 1

If you are iterating over a file object you can skip lines using next or make lines an iterator:

lines = iter(range(20))

for l in lines:
    if l == 10:
        [next(lines) for _ in range(5)]
    print(l)
0
1
2
3
4
5
6
7
8
9
10
16
17
18
19

It really depends on what you are iterating over and what you want to do.

Using your own code with iter and islice:

from itertools import islice


it = iter(enumerate(lines))

for iline, line in it:
    if <condition>:
        place_where_skip_happened = iline
        next(islice(it,5 ,5), None)
    print(line)