pup*_*eno 14 python reduce list
如何在Python中对列表的所有值应用'或'?我想的是:
or([True, True, False])
Run Code Online (Sandbox Code Playgroud)
或者如果可能的话:
reduce(or, [True, True, False])
Run Code Online (Sandbox Code Playgroud)
Wil*_*ris 31
内置函数any可以满足您的需求:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
Run Code Online (Sandbox Code Playgroud)
any有优势reduceshortcutting为以后项目的测试序列中,一旦它找到一个真正的价值.如果序列是一个后面有昂贵操作的发生器,这可能非常方便.例如:
>>> 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
Run Code Online (Sandbox Code Playgroud)
如果您的Python版本没有内置版本any(),all()那么它们很容易实现,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
Run Code Online (Sandbox Code Playgroud)
没有人提到它,但" or"在操作员模块中可用作功能:
from operator import or_
Run Code Online (Sandbox Code Playgroud)
然后你可以reduce像上面一样使用.
any尽管在最近的蟒蛇中,总会建议" ".