2013-02-12 4 views
29

Как вы можете continue родительский цикл, скажем, двух вложенных циклов в Python?Как продолжить в вложенных циклах в Python

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

Я знаю, что вы можете избежать этого в большинстве случаев, но это можно сделать на Python?

+1

какой-либо причине не просто использовать 'break'? –

+0

Используйте 'break' для выхода из внутреннего цикла - это будет немедленно продолжено во внешнем цикле. – TyrantWave

+2

Есть еще один аналогичный вопрос: http://stackoverflow.com/questions/189645/how-to-break-out-of-multiple-loops-in-python – esycat

ответ

29
  1. переносов внутреннего контура (если нет ничего другого, после него)
  2. Положите тело внешнего цикла в функция и возврат от функции
  3. Поднимите исключение и поймайте его на внешнем уровне
  4. Установите флаг, вырвайтесь из внутреннего контура и проверьте его на внешнем уровне.
  5. Реорганизуйте код, чтобы вам больше не нужно было это делать.

Я бы пошел с 5 каждый раз.

+3

6. использовать itertools :) –

+2

@gnibbler, в общем случае # 6 ⊂ # 5, но для этого конкретного случая я сделаю +1 ваш ответ – Duncan

1

используется break вырваться из внутреннего цикла и продолжить с родителем

for a in b: 
    for c in d: 
     if somecondition: 
      break // go back to parent loop 
12

Вот куча Hacky способов сделать это:

  1. Создать локальную функцию

    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() 
    

    Лучшим вариантом будет двигаться DoWork где-то еще и передать свое состояние в качестве аргументов.

  2. Используйте Исключением

    class StopLookingForThings(Exception): pass 
    
    for a in b: 
        try: 
         for c in d: 
          for e in f: 
           if somecondition: 
            raise StopLookingForThings() 
        except StopLookingForThings: 
         pass 
    
9
from itertools import product 
for a in b: 
    for c, e in product(d, f): 
     if somecondition: 
      break 
Смежные вопросы