¿Cómo se aplica 'o' a todos los valores de una lista en Python? Estoy pensando en algo como:¿Cómo se aplica 'o' a todos los valores de una lista en Python?
or([True, True, False])
o si era posible:
reduce(or, [True, True, False])
¿Cómo se aplica 'o' a todos los valores de una lista en Python? Estoy pensando en algo como:¿Cómo se aplica 'o' a todos los valores de una lista en Python?
or([True, True, False])
o si era posible:
reduce(or, [True, True, False])
La función incorporada any
hace lo que quiere:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
tiene la ventaja sobre reduce
del acortando 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. 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 su Python no tiene any()
, all()
órdenes internas continuación, se implementan fácilmente como Guido van Rossum suggested:
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
usted puede hacer esto:
reduce(lambda a,b: a or b, [True, True, False])
reducir debería hacerlo por usted, ¿no debería ?
>>> 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 posteriores (documentation)
Nadie lo ha mencionado, pero "or
" está disponible como una función en el módulo de operador:
from operator import or_
Luego puede usar reduce
como se indica anteriormente.
Siempre aconsejaría "any
" en las pitones más recientes.