¿Sabes cómo comprobar si alguno de los elementos almacenados en una secuencia (lista, tupla, etc.) tiene valor True?
Solución 1: Utilizando un bucle
La solución más clásica a este problema es, sin duda, iterar por cada elemento de la secuencia y comprobar su valor.
Echemos un vistazo al siguiente código:
def any(items):
for n in items:
if n:
return True
return False
lista = [True, False, False, True]
if any(lista):
print("Hay al menos un elemento True")
else:
print("Ningún elemento es True")
Dentro de la función any() hay un bucle for que itera por todos los elementos de la secuencia que recibe como parámetro (items).
Por cada iteración de este bucle se comprueba si el valor de n es True (if n). En caso afirmativo se retorna valor True como resultado de la función.
La ejecución de la primera instrucción return detiene el bucle y la ejecución total de la función, por lo que no se comprueban el resto de elementos de la secuencia, ni se alcanzará la segunda instrucción return con valor False.
Realmente no es necesario comprobar los demás elementos, puesto que lo que estamos buscando es que la secuencia contenga, al menos, un elemento con valor True. En el momento que se encuentra uno con dicho valor el resto son irrelevantes.
A llamar a la función all() se le pasa como argumento la lista que se ha declarado previamente (all(lista)) con varios valores boolean. Esta lista contiene al menos un valor True, por lo que el resultado de la ejecución será True.
¿Qué ocurre si ningún elemento tiene valor True?
Si ningún elemento de la secuencia contiene valor True, el bucle completará todas las iteraciones y nunca entrará en la instrucción if, puesto que jamás se cumplirá la condición (que n tenga valor True). Al no entrar en la instrucción if, nunca se ejecutará return True y no se detendrá la ejecución hasta el final, donde se encuentra la instrucción return False. Esta última si se ejecuta y devuelve False como resultado de la función.
¿Y si la secuencia no tiene elementos?
Si la secuencia no tiene elementos, entonces el bucle for no iterará y jamás de ejecutará la instrucción return que devuelve el True.
El resultado será la ejecución de la instrucción return False. Por tanto, el resultado devuelto por la función será False.
Solución 2: Utilizando la función built-in any()
Al tratarse de un problema bastante común, la función any ya está implementada dentro de la librería estándar de Python. Su funcionamiento es exactamente el mismo que he descrito antes, pero la responsabilidad de su implementación ya no recae sobre nosotros.
Si necesitas comprobar si una lista, tupla, diccionario (sólo claves) o cualquier otro objeto iterable contiene, al menos, un elemento con valor True, simplemente tendráx que invocar la función any() y pasarle como argumento dicho objeto iterable.
El ejemplo anterior quedaría así:
lista = [True, False, False, True]
if any(lista):
print("Hay al menos un elemento True")
else:
print("Ningún elemento es True")
Como puedes comprobar su implementación ya no es necesaria, simplemente hay que llamarla e interpretar su respuesta.
Sígueme:
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.