在 Python 3 中,reduce()
已移至 functools.reduce()
和 apparently最好使用列表理解或普通循环以获得更好的可读性。
我想打印列表中所有元素的异或值。
# My implementation with functools
from functools import reduce
print(reduce(lambda a, b: a^b, [1, 3, 2, 3, 4, 4, 5, 2, 1]))
我有这个:
# My implementation without functools
def XOR(x):
ans = 0
for i in x:
ans = ans ^ i
return ans
print(XOR([1, 3, 2, 3, 4, 4, 5, 2, 1]))
如何在没有 reduce()
的情况下编写此代码的更多功能版本?
(请提供 Python 3 中的引用资料或代码,如果有的话。)
最佳答案
虽然 Guido van Rossum 不太关心 reduce()
,但社区中有足够多的人确实需要它,这就是为什么它被移到 functools
而没有被删除的原因彻头彻尾。它性能卓越,非常适合您的用例。 就用它。
您可以使用 operator.xor()
使您的案例更快、更易读避免 lambda 的新 Python 框架的开销:
from functools import reduce
from operator import xor
reduce(xor, [1, 3, 2, 3, 4, 4, 5, 2, 1])
xor()
和 reduce()
都是用 C 实现的。为 lambda
回调 Python 解释器循环非常慢与调用另一个 C 函数相比。
如果你真的必须使用一个函数,那么使用
def xor_reduce(values):
result = 0
for value in values:
result ^= value
return result
使用就地 XOR 和更好的变量名。
关于python - 替换 reduce() 的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548817/