Artículo original escrito por Bala Priya C
Artículo original Python any() and all() Functions – Explained with Examples
Traducido y adaptado por Franciscomelov

Al programar en Python, ¿alguna vez has tenido que revisar si algún valor o todos los valores de un iterable tienen un valor True (Verdadero)?. La siguiente vez que tengas que hacerlo recuerda usar las funciones any() y all().

En este tutorial, aprenderemos acerca de las funciones any() y all(), también entenderemos su funcionamiento con ejemplos sencillos.

Tipo de dato booleano en Python

Antes de empezar con any() y all() repasemos los tipos de datos booleanos en Python. En Python puedes ver el valor booleano de cualquier objeto con la función bool().

#False -> Falso

# El valor booleano de None es False
print(bool(None))
# Salida
False

# El valor booleano de una cadena de texto vacia ("") es False
print(bool(""))
# salida
False

# El valor booleano de una lista vacía (o cualquier iterable vacío) es False
print(bool([]))
# Salida
False

# el valor booleano de 0 {int(0), float (0.0) y complex (0j)} es False 
print(bool(0))
# Salida
False

Como vemos en el código anterior:

  • None tiene un valor booleano de  False, (Falso)
  • El número cero(0) – entero, punto flotante (decimal) y representaciones de números complejos de 0 – todos tienen un valor booleano False, y
  • Todos los iterables vacíos como listas, tuplas y cadenas de texto tienen un valor booleano False.

Una vez entendido lo anterior podemos deducir que los valores distintos de cero e iterables no vacíos tienen un valor booleano True.

Como usar la función any() en Python

primero veamos la sintaxis básica de la función any() con ejemplos sencillos.

? Sintaxis: any(iterable)

  • Devuelve True si bool(x) es True en cualquiera de los elementos de x del iterable.
  • Devuelve False si el iterable está vacío o si el valor booleano de "todos" los elementos del iterable son False.

En resumen, la función any() toma un iterable como argumento y retorna True si por lo menos uno de los elementos del iterable es True

Aquí puedes ver algunos ejemplos para entender mejor la función any():

lista_1 = [0,0,0,1,0,0,0,0]
# any(Una lista con por lo menos un valor distinto de cero) Devuelve True
print(any(lista_1))
# Salida
True

lista_2 = [0j, 0, 0, 0.0, 0, 0, 0.0, 0]
# any(Una lista de ceros) Devuelve False
print(any(lista_2))
# Salida
False

lists_3 = [True, False, False]
# any(Una lista con por lo menos un valor True) Deveulve True
print(any(lista_3))
# Salida
True

lista_4 = ["", "", "amo programar"]
# any(Una lista con por lo menos una cadena  de texto no vacia ) Devuelve True
print(any(lista_4))
# Salida
True

lista_5 = ["", "", ""]
# any(Una lista de cadenas de texto vacias) Devuelve False
print(any(lista_5))
# Salida
False

Como saber si hay números en una cadena de caracteres con la función any() en Python

Ahora usaremos la función any() para leer una cadena de caracteres y saber si hay números o no.

Estos son los pasos a seguir para saber si hay números en una cadena de caracteres:

  • Iterar la cadena de caracteres para acceder a cada carácter (cada letra).
  • Comprobar si un carácter es un dígito llamando al método isdigit()
  • isdigit() devolverá True si el carácter en turno es un dígito de lo contrario retornará False

El método isdigit() se puede traducir como -> es dígito.

La comprensión de listas puede ser muy útil para obtener los valores booleanos de una lista.
Aquí hay pequeña explicación de comprensión de listas:

 # Comprension de listas
 
 [expresion_a_retornar por cada_elemento en un_iterable]
 
 con las palabras clave for/in que lleva originalmente:
 [expresion_a_retornar for cada_elemento in un_iterable]
     |
     |
     V
     resultado de hacerle algo a cada elemento de un iterable
    
 # En resumen
 # Iterar un interable, hacer algo a cada elemento y retornar el resultado de la operacion.
 
# Ejemplo de comprension de listas para multiplicar por 2 cada elemento de una lista

mi_lista = [1, 2, 3, 4, 5]

doble = [x * 2 for x in mi_lista]
# [2, 4, 6, 8, 10]

Como podemos ver en el código siguiente, tenemos una variable, mi_cadena, con una cadena de caracteres programar**es**divertido**345.

Así que, llamar a la función any(),  debería retornar True.
Haciendo uso de compresión de listas para obtener una lista de valores  True y False dependiendo de si el carácter es un dígito o no.

my_cadena = "programar**es**divertido**345"
buscando_digitos = [caracter.isdigit() for caracter in my_cadena]
print(any(buscando_digitos))

# Salida
True

# Puedes intentar:
# print(buscando_digitos)
# para ver los valores que retorna isdigit() cuando hay y cuando no hay un numero.

Al imprimir la lista buscando_numeros podrás notar que tiene la misma cantidad de elementos que la variable mi_cadena

Por cada carácter de la cadena de caracteres hay un valor booleano - True si el carácter es un dígito y False si el carácter no es un dígito. Esto también lo podemos ver en el siguiente ejemplo.

print(buscando_digitos)

# Output
[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True]

Como usar la función any() en Python para saber si hay letras en una cadena de caracteres

En el siguiente ejemplo, queremos saber si en una cadena de caracteres hay por lo menos una letra, el método isalpla() nos dice si un carácter es o no una letra.

La cadena a probar es ***456278))), la cual no contiene letras - al llamar any(), podemos saber que  retornara False, ya que al llamar isalpha() en cada carácter de la cadena retornará False ya que ningún carácter es una letra

mi_cadena = "***456278)))"
buscando_letras = [caracter.isalpha() for caracter in mi_cadena]
print(any(buscando_letras))

# Salida
False

La variable buscando_letras, es una lista con solo valores False, lo cual lo podemos comprobar imprimiendo la variable.

print(buscando_letras)

# Salida
[False, False, False, False, False, False, False, False, False, False, False, False]

Como usar la función any() para combinar múltiples condiciones con el operador lógico OR

La palabra "OR" se puede traducir como "O".
ejemplo de uso: Quieres tomar agua  O quieres tomar jugo

Ahora que quieres aprender programación, has decidido escribir la siguiente lista para ser más productivo y para motivarte un poco te darás un premio si por lo menos terminas una tarea ?.

image-27

Observa, aunque tenemos múltiples condiciones (tareas por hacer), podemos comer dulces aunque solo una condición se evalúa como True y no es necesario cumplirlas todas.

¿No es esto similar a una sentencia if donde revisamos si múltiples condiciones unidas por el operador lógico or evaluadas como True? Si lo es y la función any() puede ser muy útil para hacerlo.

Imagina que tienes N condiciones, c1, c2, c3, ..., cN. Así es como se vería en pseudocódigo:

if c1 or c2 or ... c_(N-1) or CN:
	# Haz esto

else:
	# Haz esto

Puedes guardar todas las condiciones en un iterable, como una lista o una tupla y llamas a la función any() con este iterable para verificar si una o más condiciones retornan True.

condiciones = [c1,c2,..., c_N]

if any(condiciones):
	# Haz esto
else:
	# Haz esto

Como usar la función all() en Python

Primero veamos la sintaxis básica de la función all().

? Sintaxis: all(iterable)

  • Retorna True si bool(x) es True en todos los valores de x en el iterable.
  • Retorna True si el iterable está vacío.
any([True, True, True]) # Retorna True
any([]) # Retorna True

any([True, True, False]) # Retorna False

La función all() toma un iterable como argumento y retorna True solo si todos los elementos del iterable tienen un valor booleano de True o el iterable está vacío, en los demás casos retornara False.

Como usar la función all() en Python, para saber si solo hay letras en una cadena de caracteres

La cadena de caracteres programar**es**divertido* contiene letras y el carácter especial  *. Si comprobamos si todos los caracteres en la cadena son letras usando la función all(), obtendríamos False

mi_cadena = "programar**es**divertido*"
buscando_letras = [caracter.isalpha() for caracter in mi_cadena]
print(all(buscando_letras))
# Saldida
False

print(buscando_letras)
# Salida
[True, True, True, True, True, True, True, True, True, False, False, True, True, False, False, True, True, True, True, True, True, True, True, True, False]

Podemos notar que la lista buscando_letras tiene el valor False en las posiciones donde está el símbolo *

Como usar la función all() en Python, para saber si solo hay números en una cadena de caracteres

Ahora comprobaremos si todos los caracteres de una cadena son números usando la función all(), la cadena 56456278 contiene solamente dígitos, por lo tanto, al usar all() obtendremos True, lo cual podemos ver en el siguiente ejemplo:

mi_cadena = "56456278"
buscando_numeros= [caracter.isdigit() for caracter in mi_cadena]
print(all(buscando_numeros))
# Salida
True

print(buscando_numeros)
# Salida
[True, True, True, True, True, True, True, True]

Como usar la función all() para combinar múltiples condiciones con el operador lógico AND

La palabra AND se traduce como "y"

Consideremos el siguiente ejemplo: ahora en lugar de dulces, tienes la oportunidad de ganar un iPad, por lo tanto, las condiciones son más difíciles. Ahora tendrás que completar todas las tareas para que tu primo te dé el iPad.?

image-25

Podemos incluir múltiples condiciones encadenadas por el operador lógico AND dentro de una sentencia if de la siguiente forma:

if c1 and c2 and ... c_(N-1) and CN:
	# Haz esto

else:
	# Haz esto

También podemos usar la función all() y guardar las condiciones en una lista para hacer el código un poco más legible de la siguiente forma:

condiciones = [c1,c2,..., c_N]

if all(condiciones):
	# Haz esto
else:
	# Haz esto

Espero que este tutorial te haya ayudado a entender las funciones  any() y all()

Espero verte en otro artículo y no olvides divertirte aprendiendo Python.