这个问题是为了好玩;我不希望答案有用。
当我看到人们用 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.mul
forand
和operator.add
for or
。这将是一个粗略的黑客攻击,我不想要这个答案......特别是考虑到如果遇到许多数字并且它们都不为零,那么乘法会变得多么昂贵!
注意:我知道all()
和any()
,它们可以更好地替代reduce()
. 正如我在顶部所说,我问这个是为了好玩。
注意:具有强制所有值的副作用的函数bool
将是可接受的答案。内置and
关键字不这样做:
x = 3 and 5 # sets x to 5, not to True
但是出于这个问题的目的,我只对可以reduce()
用于执行逻辑and
或or
操作的函数感兴趣。