433 Stimmen

Ausbrechen aus verschachtelten Schleifen

Gibt es einen einfacheren Weg, um aus verschachtelten Schleifen auszubrechen, als eine Exception zu werfen? (In Perl kann man jeder Schleife ein Label geben und zumindest eine äußere Schleife fortsetzen).

for x in range(10):
    for y in range(10):
        print x*y
        if x*y > 50:
            "break both loops"

D.h., gibt es einen schöneren Weg als:

class BreakIt(Exception): pass

try:
    for x in range(10):
        for y in range(10):
            print x*y
            if x*y > 50:
                raise BreakIt
except BreakIt:
    pass

29voto

dbn Punkte 11592

Wenn Sie eine Ausnahme auslösen wollen, können Sie eine StopIteration-Ausnahme . Damit wird zumindest die Absicht deutlich.

8voto

J S Punkte 1007

Sie können Ihren Code auch umgestalten, um einen Generator zu verwenden. Dies ist jedoch möglicherweise nicht für alle Arten von verschachtelten Schleifen eine Lösung.

3voto

Tetha Punkte 4750

In diesem speziellen Fall können Sie die Schleifen mit einem modernen Python (3.0 und wahrscheinlich auch 2.6) zusammenführen, indem Sie itertools.product verwenden.

Ich selbst habe dies als Faustregel genommen: Wenn man zu viele Schleifen verschachtelt (d.h. mehr als 2), kann man normalerweise eine der Schleifen in eine andere Methode extrahieren oder die Schleifen zu einer einzigen zusammenführen, wie in diesem Fall.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X