La función any() fue introducida en Python 2.5 para verificar de manera conveniente si hay al menos un elemento verdadero en un objeto iterable (por ejemplo, lista, tupla, generador). Es útil cuando necesitas comprobar si al menos una de varias condiciones se cumple.
Históricamente, sin ella, era necesario escribir un bucle que se interrumpiera al encontrar un elemento o combinar map y reduce, lo cual era engorroso y lento. El principal problema que resuelve any() es la concisión y legibilidad de este tipo de verificaciones.
La solución es que any() y all() trabajan con evaluación perezosa (se detienen tan pronto como encuentran False o True, respectivamente). Es importante entender la diferencia: any() devuelve True al primer elemento verdadero, mientras que all() lo hace solo si todos los elementos son verdaderos.
Ejemplo de código:
nums = [0, 0, 3, 0] if any(nums): print('Hay un elemento no cero en la lista')
Características clave:
¿Qué ocurrirá si se pasa una lista vacía como argumento a any()?
any() devolverá False. Esto es lógico: en una secuencia vacía no hay elementos verdaderos.
¿En qué se diferencia fundamentalmente any() de all()?
any() verifica la existencia de al menos un valor verdadero. all() comprueba la veracidad de todos los valores. Sus resultados son opuestos solo para colecciones estrictamente vacías.
¿Se puede usar any() con un generador que puede ser infinito?
Sí, se puede, y precisamente gracias a la evaluación perezosa, any se detendrá tan pronto como encuentre True. Si el generador nunca produce True, la función no terminará por sí misma.
def infinite_gen(): while True: yield 0 # any(infinite_gen()) — funcionará indefinidamente si no hay condiciones de salida
Se desea comprobar que al menos un valor no es None:
values = [None, None, None] if any(values): do_something() # Nunca se ejecutará si simplemente olvidamos que None == False
Ventajas:
Desventajas:
Aplicación correcta — buscar al menos un usuario mayor de 30:
users = [{'age': 25}, {'age': 35}] if any(u['age'] > 30 for u in users): print('Hay un usuario mayor de 30')
Ventajas:
Desventajas: