在Python中对具有不同运算符的列表求和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中对具有不同运算符的列表求和相关的知识,希望对你有一定的参考价值。
在python中,我们可以将列表总结为:sum(list_of_integers)
。
现在sum只是运算符+
中两个元素之间的运算。
如果我想用or
,and
,xor
等不同的运算符总结一个列表怎么办?
我可以使用for
循环逐个手动完成,但必须有更好的方法。
答案
functools.reduce
非常适合这种用例。它需要一个函数来应用累计值和下一个值,您想要减少的可迭代值,以及可选的初始值。
例如,按位或按列表中的每个值:
import functools
functools.reduce(lambda a, b: a ^ b, [1, 2, 3])
这相当于1 ^ 2 ^ 3
。
另一答案
functools.reduce
的替代方法是编写一个明确的for
循环:
def xor_reduce(args):
result = 0
for x in args:
result ^= x
return result
xor_reduce([1, 2, 3])
如果你想采用reduce
方式(对于IMO来说不是那么不合理),我会使用operator
模块:
from functools import reduce
from operator import xor
reduce(xor, [1, 2, 3])
operator
模块(在标准库中,因此应始终可用)也将所有其他标准操作定义为函数,但对于or
和and
,添加了尾随_
,因为它们是保留关键字:
from operator import or_, and_
reduce(or_, [1, 2, 3])
reduce(and_, [1, 2, 3])
虽然对于这两个你可以使用内置函数any
和all
:
any([1, 2, 3])
all([1, 2, 3])
以上是关于在Python中对具有不同运算符的列表求和的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中对具有相同 ID 的多行求和