2024-03-28 11:03:55 发布
网友
在python中,我们可以将一个列表求和为:sum(list_of_integers)。在
sum(list_of_integers)
现在sum只是两个元素之间的一个运算,运算符+。在
+
如果我想用不同的运算符对一个列表求和,比如or,and,xor等等?在
or
and
xor
我可以使用for循环逐个手动完成,但肯定有更好的方法。在
for
functools.reduce的替代方法是编写一个显式的for循环:
functools.reduce
def xor_reduce(args): result = 0 for x in args: result ^= x return result xor_reduce([1, 2, 3])
如果你想用reduce的方式(IMO,这不是很不合理),我会使用operator模块:
reduce
operator
operator模块(位于标准库中,因此应该始终可用)也将所有其他标准操作定义为函数,但是对于or和{}添加了一个尾随的_,因为它们是保留关键字:
_
from operator import or_, and_ reduce(or_, [1, 2, 3]) reduce(and_, [1, 2, 3])
尽管对于这两个,您可以使用内置函数any和{}:
any
functools.reduce非常适合这个用例。它需要一个函数来应用于累积值和下一个值、要减少的iterable和可选的初始化器。在
例如,对列表中的每个值进行位或运算:
import functools functools.reduce(lambda a, b: a ^ b, [1, 2, 3])
这相当于1 ^ 2 ^ 3。在
1 ^ 2 ^ 3
functools.reduce
的替代方法是编写一个显式的for
循环:如果你想用
^{pr2}$reduce
的方式(IMO,这不是很不合理),我会使用operator
模块:operator
模块(位于标准库中,因此应该始终可用)也将所有其他标准操作定义为函数,但是对于or
和{_
,因为它们是保留关键字:尽管对于这两个,您可以使用内置函数}:
^{4}$any
和{functools.reduce
非常适合这个用例。它需要一个函数来应用于累积值和下一个值、要减少的iterable和可选的初始化器。在例如,对列表中的每个值进行位或运算:
这相当于
1 ^ 2 ^ 3
。在相关问题 更多 >
编程相关推荐