如何将“或”应用于 Python 中列表的所有值?我在想类似的事情:
or([True, True, False])
或者如果可能的话:
reduce(or, [True, True, False])
内置函数any
可以满足您的要求:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
reduce
一旦找到真值,它的优势在于可以缩短序列中后面项目的测试。如果序列是一个后面有昂贵操作的生成器,这将非常方便。例如:
>>> 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
如果您的 Python 版本没有any()
, all()
builtins,那么它们很容易按照Guido van Rossum 的建议实现:
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
没有人提到它,但是 " or
" 可以作为 operator 模块中的一个函数使用:
from operator import or_
然后你可以reduce
像上面那样使用。
any
尽管在最近的 Python 中,总是会建议“ ”。
>>> all([True,False,True])
False
>>> any([True,False,True])
True
Python 2.5 及更高版本(文档)
你可以这样做:
reduce(lambda a,b: a or b, [True, True, False])
reduce 应该为你做,不是吗?
>>> def _or(x, y):
... return x or y
...
>>> reduce(_or, [True, True, False])
True