How to continue in nested loops in Python

2020-02-23 04:37发布

How can you continue the parent loop of say two nested loops in Python?

for a in b:
    for c in d:
        for e in f:
            if somecondition:
                <continue the for a in b loop?>

I know you can avoid this in the majority of cases but can it be done in Python?

标签: python
5条回答
Evening l夕情丶
2楼-- · 2020-02-23 05:19

You use break to break out of the inner loop and continue with the parent

for a in b:
    for c in d:
        if somecondition:
            break # go back to parent loop
查看更多
够拽才男人
3楼-- · 2020-02-23 05:25

use a boolean flag

problem = False
for a in b:
  for c in d:
    if problem:
      continue
    for e in f:
        if somecondition:
            problem = True
查看更多
Melony?
4楼-- · 2020-02-23 05:35

Here's a bunch of hacky ways to do it:

  1. Create a local function

    for a in b:
        def doWork():
            for c in d:
                for e in f:
                    if somecondition:
                        return # <continue the for a in b loop?>
        doWork()
    

    A better option would be to move doWork somewhere else and pass its state as arguments.

  2. Use an exception

    class StopLookingForThings(Exception): pass
    
    for a in b:
        try:
            for c in d:
                for e in f:
                    if somecondition:
                        raise StopLookingForThings()
        except StopLookingForThings:
            pass
    
查看更多
闹够了就滚
5楼-- · 2020-02-23 05:36
from itertools import product
for a in b:
    for c, e in product(d, f):
        if somecondition:
            break
查看更多
老娘就宠你
6楼-- · 2020-02-23 05:37
  1. Break from the inner loop (if there's nothing else after it)
  2. Put the outer loop's body in a function and return from the function
  3. Raise an exception and catch it at the outer level
  4. Set a flag, break from the inner loop and test it at an outer level.
  5. Refactor the code so you no longer have to do this.

I would go with 5 every time.

查看更多
登录 后发表回答