Aprende leyendo en orden

Comprobaciones masivas con all() y any()

Aprende las funciones integradas all() y any() para comprobar si todos o al menos un elemento cumplen una condición.

all() — True solo cuando todos los elementos son True

all(iterable) devuelve True cuando todos los elementos de la lista, tupla o conjunto que pasas son True (o se evalúan como verdaderos), y False si al menos un elemento es False.

Cómo decide all()
[T, T, T]all()True[T, F, T]all()False[ ] (vacío)all()True

True si todos los elementos son True. False si algún elemento es False. True cuando se le pasa un iterable vacío.

Se aplican las mismas reglas de veracidad del artículo anterior: 0, las cadenas vacías y las listas vacías se tratan como False, así que una lista de números que contenga 0 hace que all() devuelva False.

# Una lista de bools: False si algún elemento es False
print(all([True, True, True]))    # True
print(all([True, False, True]))   # False

# Una lista de números: False si está el 0
print(all([1, 2, 3]))             # True
print(all([1, 0, 3]))             # False

# ¿Están todos los campos obligatorios del formulario rellenos?
form_values = ["Ana", "ana@example.com", "Calle Mayor 100, Madrid"]
if all(form_values):
    print("Listo para enviar")
else:
    print("Algunos campos están vacíos")
# Salida: Listo para enviar

Comprueba si todos los artículos del carrito están en stock.

① Define in_stock = [True, True, True, False].

② Imprime el resultado de all(in_stock).

③ Con if all(in_stock):, imprime «Pasar al pago» cuando todo esté en stock, en caso contrario «Algunos artículos están agotados».

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

any() — True si al menos un elemento es True

any(iterable) devuelve True si al menos un elemento es True, y False solo cuando todos los elementos son False. Donde all() es la comprobación estricta que exige unanimidad, any() es la comprobación indulgente que se conforma con una sola coincidencia.

FunciónDevuelve True cuandoDevuelve False cuandoEn una lista vacía
all()Todos los elementos son TrueAl menos un elemento es FalseTrue
any()Al menos un elemento es TrueTodos los elementos son FalseFalse
# Una lista de bools: True si al menos uno es True
print(any([False, False, True]))   # True
print(any([False, False, False]))  # False

# Reintentar si se levantó al menos una bandera de error
error_flags = [False, False, True, False]
if any(error_flags):
    print("Es necesario reintentar")
else:
    print("Todo correcto")
# Salida: Es necesario reintentar

Comprueba si al menos uno de los encuestados quiere asistir.

① Define want_to_join = [False, False, False, True, False].

② Imprime el resultado de any(want_to_join).

③ Con if any(want_to_join):, imprime «Realizar el evento» cuando haya al menos un sí, en caso contrario «Cancelar».

Editor Python

Ejecutar el código para ver el resultado

Comportamiento ante una colección vacía

Cuando pasas una lista vacía, all([]) devuelve True y any([]) devuelve False. Es contraintuitivo, así que ten cuidado cuando los datos puedan tener legítimamente cero elementos.

Comportamiento con una colección vacía
[ ] (vacío)all()True[ ] (vacío)any()False
print(all([]))   # True  <- no había "nada False" que encontrar, así que True
print(any([]))   # False <- no había "nada True" que encontrar, así que False

# Ejemplo: un carrito sin artículos registrados todavía
cart = []
if all(cart):
    print("Todos los artículos verificados")   # se ejecuta incluso cuando el carrito tiene 0 artículos
# Esto puede no coincidir con tu intención, así que comprueba primero si está vacío

Decide de antemano cómo manejar las listas vacías

Cuando usas all() con el espíritu de «si todos los miembros cumplen la condición…», 0 miembros sigue devolviendo True. Para evitar pases prematuros no deseados, comprueba primero que la lista no esté vacía, como if members and all(...):.

Confirma de primera mano el comportamiento con listas vacías.

① Define empty = [].

② Imprime los resultados de all(empty) y any(empty).

③ Usa if empty and all(empty): para imprimir «Todos los artículos OK» solo cuando la lista no esté vacía y todo sea True (verifica que no se imprime nada para la lista vacía).

Editor Python

Ejecutar el código para ver el resultado

Combina con condiciones para comprobar de forma masiva

all() / any() realmente brillan cuando se combinan con expresiones de comparación. Para comprobar «¿son todos mayores o iguales a 18?», construye una lista de resultados de >= 18 a partir de las edades y pásala — toda la comprobación cabe en una línea.

ages = [19, 20, 18, 25, 57]

# Construye primero una lista de bools y luego pásasela a all (la versión más fácil en 2 pasos)
checks = [age >= 18 for age in ages]
print(checks)         # [True, True, True, True, True]
print(all(checks))    # True

# O escríbelo en línea (comprensiones de listas / expresiones generadoras — se cubre a continuación)
print(all(age >= 18 for age in ages))   # True
print(any(age >= 65 for age in ages))   # False

Cubriremos las comprensiones de listas como [age >= 18 for age in ages] en detalle en el capítulo de for. Por ahora, basta con captar la idea de «puedes evaluar una condición sobre una lista y pasar el resultado directamente a all() / any()».

Usa una lista de puntajes de exámenes para hacer juicios de tipo aprobado/no aprobado.

① Define scores = [78, 82, 65, 91, 55].

② Decide si todos sacaron 60 o más (usando all) y si al menos una persona sacó 90 o más (usando any), y asígnalos a all_pass y has_genius.

③ Imprime ambos resultados.

Editor Python

Ejecutar el código para ver el resultado

En este artículo aprendimos all() y any() para comprobar el contenido de listas o tuplas de forma masiva.

all() exige que todos pasen, any() se conforma con al menos uno, y con una entrada vacía all es True mientras que any es False. En el siguiente artículo profundizaremos en el propio bucle for — el motor detrás de la expresión [... for ... in ...] que apareció discretamente aquí como una «lista de resultados».

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué imprime este código?
print(all([1, 2, 0, 3]))

Pregunta 2¿Qué imprime este código?
print(any([False, False, False]))

Pregunta 3Cuando se pasa una lista vacía [], ¿cuál combinación de valores de retorno de all([]) y any([]) es correcta?