gpt4 book ai didi

python - 替换 reduce() 的功能方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:36 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com