vacia - ¿Cómo se aplica ''o'' a todos los valores de una lista en Python?
función range de python (5)
¿Cómo se aplica ''o'' a todos los valores de una lista en Python? Estoy pensando algo así como:
or([True, True, False])
o si fue posible:
reduce(or, [True, True, False])
La función incorporada hace lo que quieras:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
tiene la ventaja de reduce
atajo de la prueba para los artículos posteriores en la secuencia una vez que encuentra un valor verdadero. Esto puede ser muy útil si la secuencia es un generador con una costosa operación detrás de él. Por ejemplo:
>>> def iam(result):
... # Pretend this is expensive.
... print "iam(%r)" % result
... return result
...
>>> any((iam(x) for x in [False, True, False]))
iam(False)
iam(True)
True
>>> reduce(lambda x,y: x or y, (iam(x) for x in [False, True, False]))
iam(False)
iam(True)
iam(False)
True
Si la versión de Python no tiene any()
, all()
instrucciones internas, entonces se implementan fácilmente ya que Guido van Rossum sugirió :
def any(S):
for x in S:
if x:
return True
return False
def all(S):
for x in S:
if not x:
return False
return True
Nadie lo ha mencionado, pero " or
" está disponible como una función en el módulo de operador:
from operator import or_
Entonces puedes usar reduce
como arriba.
Sin embargo, siempre aconsejaría a " any
" en pitones más recientes.
Puedes hacerlo:
reduce(lambda a,b: a or b, [True, True, False])
reducir debería hacerlo por usted, ¿no es así?
>>> def _or(x, y):
... return x or y
...
>>> reduce(_or, [True, True, False])
True
>>> all([True,False,True])
False
>>> any([True,False,True])
True
Python 2.5 y versiones posteriores ( documentación )