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

标签 python python-3.x

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

相关文章:

python - Django 两个来自同一模型的外键

python - Flask + RabbitMQ + SocketIO - 转发消息

python - 更改父级继承的python类的方法

python - 使用重新索引将丢失的日期添加到数据框替换数据

用于将文件转换为 MP3 并设置其质量的 Python 库

python - 如何更改并行进程数?

python - 有人可以解释这个表达式 : a[len(a):] = [x] equivalent to list. append(x)

python - 如何清除这两个小部件以及它们被其他小部件清除

python - 我可以获取类的 __init__ 方法中定义的所有属性吗?

python - 解压缩导致 ValueError 的 zip 对象