¿Cómo salir de múltiples bucles en Python?

En este artículo, veremos cómo salir de múltiples bucles en Python. Por ejemplo, se nos da una lista de listas arr y un entero x. La tarea es iterar a través de cada lista anidada en orden y seguir mostrando los elementos hasta que se encuentre un elemento igual a x. Si se encuentra dicho elemento, se muestra un mensaje apropiado y el código debe dejar de mostrar más elementos.

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

Un enfoque directo a este problema es iterar a través de todos los elementos de arr usando un bucle for y usar un bucle for anidado para iterar a través de todos los elementos de cada una de las listas anidadas en arr y seguir imprimiéndolas. Si se encuentra un elemento igual a x, se muestra el mensaje apropiado y el código debe salir de ambos bucles.

Sin embargo, si simplemente usamos una declaración de interrupción única, el código solo terminará el ciclo interno y el ciclo externo continuará ejecutándose, lo que no queremos que suceda. 

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)

Producción:

1
2
3
Element found
7
8
9

En el caso anterior, tan pronto como se encontró 4, la instrucción break finalizó el ciclo interno y todos los demás elementos de la misma lista anidada (5, 6) se omitieron, pero el código no finalizó el ciclo externo que luego procedió a la siguiente lista anidada y también imprimió todos sus elementos.

Enfoque 1: Uso de la declaración de devolución

Defina una función y coloque los bucles dentro de esa función. El uso de una declaración de retorno puede finalizar directamente la función, rompiendo así todos los bucles.

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)

Producción:

1
2
3
Element found

Enfoque 2: Usar else: continuar

Una forma más fácil de hacer lo mismo es usar un bloque else que contenga una instrucción continue después del ciclo interno y luego agregar una instrucción break después del bloque else dentro del ciclo externo. Si el ciclo interno termina debido a una declaración de ruptura dada dentro del ciclo interno, entonces el bloque else después del ciclo interno no se ejecutará y la instrucción break después del bloque else también terminará el ciclo externo. Por otro lado, si el ciclo interno se completa sin encontrar ninguna declaración de ruptura, entonces se ejecutará el bloque else que contiene la declaración continua y el ciclo externo continuará ejecutándose. La idea es la misma incluso si aumenta el número de bucles.

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)

Producción:

1
2
3
Element found

Enfoque 3: usar una variable de bandera

Otra forma de salir de múltiples bucles es inicializar una variable indicadora con un valor Falso. A la variable se le puede asignar un valor Verdadero justo antes de salir del ciclo interno. El ciclo externo debe contener un bloque if después del ciclo interno. El bloque if debe verificar el valor de la variable flag y contener una instrucción break. Si la variable flag es True, entonces el bloque if se ejecutará y también saldrá del bucle interno. De lo contrario, el bucle exterior continuará.

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)

Producción:

1
2
3
Element found

Publicación traducida automáticamente

Artículo escrito por prakharguptadpskuwait y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *