In diesem Artikel werden wir sehen, wie man in Python aus mehreren Schleifen ausbricht. Zum Beispiel erhalten wir eine Liste von Listen arr und eine ganze Zahl x. Die Aufgabe besteht darin, jede verschachtelte Liste der Reihe nach zu durchlaufen und die Elemente so lange anzuzeigen, bis ein Element gleich x gefunden wird. Wenn ein solches Element gefunden wird, wird eine entsprechende Meldung angezeigt und der Code muss aufhören, weitere Elemente anzuzeigen.

Input: arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]], x = 6
Output:
1
2
3
Element found
Input: arr = [[10, 20, 30], [40, 50, 60, 70]], x = 50
Output:
10
20
30
40
Element found

Ein direkter Ansatz für dieses Problem besteht darin, alle Elemente von arr mit einer for-Schleife zu durchlaufen und eine verschachtelte for-Schleife zu verwenden, um alle Elemente jeder der verschachtelten Listen in arr zu durchlaufen und sie weiter auszugeben. Wenn ein Element gleich x gefunden wird, wird die entsprechende Meldung angezeigt und der Code muss aus beiden Schleifen ausbrechen.

Wenn wir jedoch einfach eine einzelne break-Anweisung verwenden, beendet der Code nur die innere Schleife und die äußere Schleife läuft weiter, was wir nicht wollen. 

Python3

def elementInArray(arr, x):
 
    # Iterating through all
    # lists present in arr:
    for i in arr:
       
        # Iterating through all the elements
        # of each of the nested lists in arr:
        for j in i:
 
            # Checking if any element in the
            # nested list is equal to x:
            if j == x:
                print('Element found')
                break
            else:
                print(j)
 
 
# Driver Code:
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = 4
elementInArray(arr, x)

Ausgabe:

1
2
3
Element found
7
8
9

Im obigen Fall beendete die break-Anweisung die innere Schleife, sobald 4 gefunden wurde, und alle anderen Elemente derselben verschachtelten Liste (5, 6) wurden übersprungen, aber der Code beendete nicht die äußere Schleife which ging dann zur nächsten verschachtelten Liste und druckte auch alle ihre Elemente.

Ansatz 1: Verwendung der return-Anweisung

Definieren Sie eine Funktion und platzieren Sie die Schleifen innerhalb dieser Funktion. Die Verwendung einer return-Anweisung kann die Funktion direkt beenden und so aus allen Schleifen ausbrechen.

Python3

# Python code to break out of
# multiple loops by defining a
# function and using return statement
 
 
def elementInArray(arr, x):
 
    # Iterating through all
    # lists present in arr:
    for i in arr:
       
        # Iterating through all the elements
        # of each of the nested lists in arr:
        for j in i:
 
            # Checking if any element in the
            # nested list is equal to x and returning
            # the function if such element is found
            # else printing the element:
            if j == x:
                print('Element found')
                return
            else:
                print(j)
 
 
# Driver Code:
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = 4
elementInArray(arr, x)

Ausgabe:

1
2
3
Element found

Ansatz 2: Mit else: Continue

Eine einfachere Möglichkeit, dasselbe zu tun, besteht darin, einen else-Block zu verwenden, der eine Continue-Anweisung nach der inneren Schleife enthält, und dann eine break-Anweisung nach dem else-Block innerhalb der äußeren Schleife hinzuzufügen. Wenn die innere Schleife aufgrund einer break-Anweisung innerhalb der inneren Schleife beendet wird, wird der else-Block nach der inneren Schleife nicht ausgeführt und die break-Anweisung nach dem else-Block beendet auch die äußere Schleife. Wenn andererseits die innere Schleife abgeschlossen wird, ohne auf eine break-Anweisung zu stoßen, wird der else-Block mit der Continue-Anweisung ausgeführt und die äußere Schleife wird weiter ausgeführt. Die Idee ist die gleiche, auch wenn die Anzahl der Schleifen zunimmt.

Python3

# Python code to break out of multiple
# loops by using an else block
 
 
def elementInArray(arr, x):
 
    # Iterating through all
    # lists present in arr:
    for i in arr:
       
        # Iterating through all the elements
        # of each of the nested lists in arr:
        for j in i:
 
            # Checking if any element in the
            # nested list is equal to x:
            if j == x:
                print('Element found')
                break
            else:
                print(j)
                 
        # If the inner loop completes without encountering
        # the break statement then the following else
        # block will be executed and outer loop will
        # continue to the next value of i:
        else:
            continue
             
        # If the inner loop terminates due to the
        # break statement, the else block will not
        # be executed and the following break
        # statement will terminate the outer loop also:
        break
 
 
# Driver Code:
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = 4
elementInArray(arr, x)

Ausgabe:

1
2
3
Element found

Ansatz 3: Verwendung einer Flag-Variablen

Eine andere Möglichkeit, mehrere Schleifen zu durchbrechen, besteht darin, eine Flag-Variable mit einem False-Wert zu initialisieren. Der Variablen kann unmittelbar vor dem Ausbrechen aus der inneren Schleife ein wahrer Wert zugewiesen werden. Die äußere Schleife muss nach der inneren Schleife einen if-Block enthalten. Der if-Block muss den Wert der flag-Variable prüfen und eine break-Anweisung enthalten. Wenn die Flag-Variable True ist, wird der if-Block ausgeführt und bricht auch aus der inneren Schleife aus. Andernfalls wird die äußere Schleife fortgesetzt.

Python3

# Python code to break out of multiple
# loops by using a flag variable
 
 
def elementInArray(arr, x):
    flag = False  # Defining the flag variable
 
    # Iterating through all
    # lists present in arr:
    for i in arr:
       
        # Iterating through all the elements
        # of each of the nested lists in arr:
        for j in i:
 
            # Checking if any element in the
            # nested list is equal to x
            # and assigning True value to
            # flag if the condition is met
            # else printing the element j:
            if j == x:
                flag = True
                print('Element found')
                break
            else:
                print(j)
                 
        # If the inner loop terminates due to
        # the break statement and flag is True
        # then the following if block will
        # be executed and the break statement in it
        # will also terminate the outer loop. Else,
        # the outer loop will continue:
        if flag == True:
            break
 
 
# Driver Code:
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = 4
elementInArray(arr, x)

Ausgabe:

1
2
3
Element found