Logotipo de Zephyrnet

any () y all () en Python con ejemplos

Fecha:


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 ors 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 Truey 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 booleans. 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 como False así, ellos son no tratado como False!
  • Cualquier secuencia vacía (o colección) se trata como False, incluso vacío strings, vacío lists, etc. Tenga en cuenta que puede ocurrir un comportamiento inesperado al usar all() con un vacio iterable (volverá True).
  • El actual boolean propuesta de False por supuesto es tratado como False así como el valor especial None.

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/

punto_img

Información más reciente

punto_img