How to skip a single loop iteration in python?

15,838

Solution 1

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

Solution 2

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
Share:
15,838
cat40
Author by

cat40

Updated on June 24, 2022

Comments

  • cat40
    cat40 almost 2 years

    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