7

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

Community
  • 1
  • 1
cat40
  • 318
  • 1
  • 4
  • 13

3 Answers3

16

You can create an iterator from 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
Moses Koledoye
  • 77,341
  • 8
  • 133
  • 139
4

Just set a flag:

>>> i
[0, 1, 2, 3, 4, 5, 6, 7]
>>> skip = False
>>> for q in i:
...    if skip:
...      skip = False
...      continue
...    if q == 5:
...       skip = True
...    print(q)
...
0
1
2
3
4
5
7
Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284
0
runNext = True
for i in list1:
    if i == 5:
        runNext = False
    else:
        if runNext:
            #do something
        runNext = False
Moon Cheesez
  • 2,489
  • 3
  • 24
  • 38
Robert Columbia
  • 6,313
  • 15
  • 32
  • 40