2013-02-12 13 views
29

Come è possibile eseguire il ciclo genitore di due cicli nidificati in Python con lo continue?Come continuare in loop nidificati in Python

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

So che si può evitare questo nella maggior parte dei casi ma può essere fatto in Python?

+1

alcun motivo per non usare 'break'? –

+0

Usa 'break' per lasciare il ciclo interno - questo continuerà immediatamente nel ciclo esterno. – TyrantWave

+2

C'è un'altra domanda simile: http://stackoverflow.com/questions/189645/how-to-break-out-of-multiple-loops-in-python – esycat

risposta

29
  1. Pausa dal ciclo interno (se non c'è niente altro dopo)
  2. Mettere il corpo del ciclo esterno in una funzione e il ritorno dalla funzione
  3. Sollevare un'eccezione e catturarla al livello esterno
  4. Impostare un flag, interrompere il loop interno e verificarlo a un livello esterno.
  5. Riforma il codice in modo da non doverlo più fare.

Vorrei andare con 5 ogni volta.

+3

6. use itertools :) –

+2

@gnibbler, Nel caso generale # 6 ⊂ # 5 ma per questo caso specifico farò +1 alla tua risposta – Duncan

1

Si utilizza break di uscire dal ciclo interno e continuare con il genitore

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

Ecco un sacco di modi hacky per farlo:

  1. Creare una funzione locale

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

    Una soluzione migliore sarebbe quella di spostare DoWork qualche altra parte e passare il suo stato come argomenti.

  2. Utilizzare un'eccezione

    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