Introducción a any () y all ()
En este tutorial, cubriremos el any()
y all()
funciona en Python.
La any(iterable)
y all(iterable)
son funciones integradas en Python y existen desde que se lanzó Python 2.5. Ambas funciones son equivalentes a escribir una serie de or
y and
operadores respectivamente entre cada uno de los elementos del pasado iterable
. Ambas son funciones de conveniencia que acortan el código al reemplazar los bucles repetitivos.
Ambos métodos provocan un cortocircuito y devuelven un valor lo antes posible, por lo que incluso con grandes iterables, son tan eficientes como pueden ser.
Los y / u operadores
Recordemos cómo and
/or
los operadores funcionan, ya que estas funciones se basan en ellos.
El u operador
La or
el operador evalúa a True
si alguna de las condiciones (operandos) son True
.
print("(2 == 2) or (3 == 3) evaluates to: " + str((2 == 2) or (3 == 3)))
print("(2 == 2) or (3 == 2) evaluates to: " + str((2 == 2) or (3 == 2)))
print("(2 == 0) or (3 == 2) evaluates to: " + str((2 == 0) or (3 == 2)))
Salida:
(2 == 2) or (3 == 3) evaluates to: True
(2 == 2) or (3 == 2) evaluates to: True
(2 == 0) or (3 == 2) evaluates to: False
Podemos encadenar múltiples or
s en una sola declaración, y nuevamente evaluará a True
if cualquier de las condiciones son True
:
print(str(False or False or False or True or False))
Esto resulta en:
True
El y operador
La and
el operador evalúa a True
solo si todas las condiciones son True
:
print("(2 == 2) and (3 == 3) evaluates to: " + str((2 == 2) and (3 == 3)))
print("(2 == 2) and (3 == 2) evaluates to: " + str((2 == 2) and (3 == 2)))
print("(2 == 0) and (3 == 2) evaluates to: " + str((2 == 0) and (3 == 2)))
Salida:
(2 == 2) and (3 == 3) evaluates to: True
(2 == 2) and (3 == 2) evaluates to: False
(2 == 0) and (3 == 2) evaluates to: False
similar a or
, podemos encadenar múltiples and
operadores, y evaluarán a True
sólo si todo el los operandos evalúan a True
:
print(str(True and True and True and False and True))
Esto resulta en:
False
alguna()
El método any(iterable)
se comporta como una serie de or
operadores entre cada elemento de la iterable
Pasamos. Se utiliza para reemplazar bucles similares a este:
for element in some_iterable: if element: return True
return False
Obtenemos el mismo resultado simplemente llamando any(some_iterable)
:
print(any([2 == 2, 3 == 2]))
print(any([True, False, False]))
print(any([False, False]))
Ejecutar este fragmento de código daría como resultado:
True
True
False
Note: Puede ocurrir un comportamiento inesperado al usar any()
con diccionarios y tipos de datos que no sean booleanos. Si any()
se usa con un diccionario, comprueba si alguno de los claves evaluar a True
, no la valores:
dict = {True : False, False: False} print(any(dict))
Esto produce:
True
Mientras que si any()
comprobado los valores, la salida habría sido False
.
El método any()
a menudo se usa en combinación con el map()
método y listas de comprensiones:
old_list = [2, 1, 3, 8, 10, 11, 13]
list_if_even = list(map(lambda x: x % 2 == 0, old_list))
list_if_odd = [x % 2 != 0 for x in old_list] print(list_if_even)
print(list_if_odd) print("Are any of the elements even? " + str(any(list_if_even)))
print("Are any of the elements odd? " + str(any(list_if_odd)))
Esto produce:
[True, False, False, True, True, False, False]
[False, True, True, False, False, True, True]
Are any of the elements even? True
Are any of the elements odd? True
Nota: Si un vacio iterable
se pasa a any()
, el método devuelve False
.
Si desea leer más sobre las funciones map (), filter () y reduce (), ¡te tenemos cubierto!
todas()
La all(iterable)
método evalúa como una serie de and
operadores entre cada uno de los elementos en el iterable
Pasamos. Se utiliza para reemplazar bucles similares a este:
for element in iterable: if not element: return False
return True
El método devuelve True
solo si cada elemento en iterable
evalúa a True
y False
de otra manera:
print(all([2 == 2, 3 == 2]))
print(all([2 > 1, 3 != 4]))
print(all([True, False, False]))
print(all([False, False]))
Esto produce:
False
True
False
False
Note: Al igual que con any()
, puede ocurrir un comportamiento inesperado al pasar diccionarios y tipos de datos que no sean boolean
. De nuevo si all()
se usa con un diccionario, comprueba si todos los claves evaluar a True
, no la valores.
Otra similitud con any()
es que all()
también se usa comúnmente en combinación con el map()
funciones y listas de comprensiones:
old_list = ["just", "Some", "text", "As", "An", "example"]
list_begins_upper = list(map(lambda x: x[0].isupper(), old_list))
list_shorter_than_8 = [len(x) < 8 for x in old_list] print(list_begins_upper)
print(list_shorter_than_8) print("Do all the strings begin with an uppercase letter? " + str(all(list_begins_upper)))
print("Are all the strings shorter than 8? " + str(all(list_shorter_than_8)))
Esto produce:
[False, True, False, True, True, False]
[True, True, True, True, True, True]
Do all the strings begin with an uppercase letter? False
Are all strings shorter than 8? True
Nota: Si un vacio iterable
se pasa a all()
, el método devuelve True
! Esto se debe a que el código para all()
comprueba si hay alguna False
elementos en el iterable
, y en el caso de una lista vacía no hay elementos y, por lo tanto, no hay False
elementos tampoco.
Conversión booleana y funciones any (), all ()
Una causa común de confusión y errores al usar cualquier operador lógico y, por lo tanto, al usar any()
y all()
también, es lo que sucede cuando los elementos no son del boolean
tipo de datos. En otras palabras, cuando no son exactamente True
of False
pero en cambio tiene que ser evaluado para True
or False
.
Algunos lenguajes de programación no evalúanboolean
tipos de datos a boolean
s. Por ejemplo, Java se quejaría si intentara algo similar a if("some string")
or if(15)
y decirte que el tipo que usaste no se puede convertir a boolean
.
Python, por otro lado, no hace tal cosa, y en su lugar convertirá lo que le pasó a boolean
sin avisarte al respecto.
Python convierte la mayoría de las cosas a True
con algunas excepciones:
- Cualquier valor numérico igual a 0 (incluido 0.0) se trata como
False
. Un error común aquí es que los valores negativos (-2, -3.3, ...) se tratan comoFalse
así, ellos son no tratado comoFalse
! - Cualquier secuencia vacía (o colección) se trata como
False
, incluso vacíostring
s, vacíolist
s, etc. Tenga en cuenta que puede ocurrir un comportamiento inesperado al usarall()
con un vacioiterable
(volveráTrue
). - El actual
boolean
propuesta deFalse
por supuesto es tratado comoFalse
así como el valor especialNone
.
Algunos ejemplos de cómo podemos usar la forma en que Python "boolean-izes" otros tipos de datos con any()
y all()
.
list_of_strings = ["yet", "another", "example",""]
print("Do all strings have some content?", all(list_of_strings)) list_of_ints = [0, 0.0, -2, -5]
print("Are any of the ints different than 0?", any(list_of_ints))
Esto produce:
Do all strings have some content? False
Are any of the ints different than 0? True
Tenga en cuenta que es posible que aún desee escribir código más legible al no usar implícito boolean
conversión como esta.
Conclusión
Ambos any()
y all()
las funciones están ahí por conveniencia y deben usarse solo cuando acortan el código pero mantienen la legibilidad.
En este artículo, hemos saltado al any()
y all()
funciones y mostró su uso a través de varios ejemplos.
Fuente: https://stackabuse.com/any-and-all-in-python-with-examples/