cat40 cat40 - 5 months ago 34
Python Question

How to skip a single loop iteration in python?

I have the following code:

for i in list1:
if i == 5:
#skip the NEXT iteration (not the end of this one)
else:
#do something


How do I skip the iteration that comes after the iteration that throws the skip. For example, if
list1=[1, 2, 3, 4, 5, 6, 7]
, the loop will skip 6 and go straight to 7 because 5 triggered the skip
I've seen this question and several others, but they all deal with skipping the current iteration, while I want to skip the next iteration. The answers to those questions suggest
continue
, which as far as I can tell will stop the remainder of the current iteration and move on to the next one, which is not what I want. How can I skip a single iteration in a loop?

Edit: Using
next()
has been suggested, but this does not work for me. When I run the following code:

a = [1, 2, 3, 4, 5, 6, 7, 8]
ai = iter(a)
for i in a:
print i
if i == 5:
_ = next(ai)


I get

1
2
3
4
5
6 #this should not be here
7
8


Using
next()
is also the suggestion in this question: Skip multiple iterations in loop python

Answer

You can an iterator on the list. With this, you can mutate the loop items while looping:

it = iter(list1)
for i in it:
    if i == 5:
        next(it) # Does nothing, skips next item
    else:
        #do something 

In case you're planning to use the value at i==5, you should do something before the evaluating the condition:

it = iter(list1)
for i in it:
    #do something
    if i == 5:
        next(it) # Does nothing, skips next item

If you're doing this in a terminal, you should assign the next item to a variable as the terminal may force an autoprint on a dangling reference:

>>> list1 = [1, 2, 3, 4, 5, 6, 7]
>>> it = iter(list1)
>>> for i in it:
...    print(i)
...    if i == 5:
...       j = next(it) # here
...
1
2
3
4
5
7
Comments