这个问题是为了好玩;我不希望答案有用。
当我看到人们用 Python 做事时reduce(),他们经常利用 Python 中的内置函数,通常来自operator模块。
这有效:
result = reduce(lambda a, b: a + b, range(5))
但通常你会看到:
from operator import add
result = reduce(add, range(5))
对我来说奇怪的是该operator模块似乎没有 logical 功能and。它确实有按位和,但不是逻辑and的。
所以假设你正在这样做:
result = reduce(lambda a, b: a and b, range(1, 6))
有没有可以在这里使用的内置函数?
我也想知道是否有一个内置函数可以替换or.
如果首先将参数映射到布尔值,则可以使用按位和 from operator,或者直接使用bool.__and__,如下所示:
from operator import and_
result = reduce(and_, map(bool, range(1, 6)))
result = reduce(bool.__and__, map(bool, range(1, 6)))
并且同样与operator.or_()或bool.__or__为or操作。但我正在寻找一个不需要映射到布尔值的函数。
如果您确定您的值都是整数,则可以使用operator.mulforand和operator.addfor or。这将是一个粗略的黑客攻击,我不想要这个答案......特别是考虑到如果遇到许多数字并且它们都不为零,那么乘法会变得多么昂贵!
注意:我知道all()和any(),它们可以更好地替代reduce(). 正如我在顶部所说,我问这个是为了好玩。
注意:具有强制所有值的副作用的函数bool将是可接受的答案。内置and关键字不这样做:
x = 3 and 5 # sets x to 5, not to True
但是出于这个问题的目的,我只对可以reduce()用于执行逻辑and或or操作的函数感兴趣。