功能方式替换reduce()

时间:2018-01-31 18:12:26

标签: python python-3.x

在Python 3中,reduce()已移至functools.reduce()apparently,为了更好的可读性,最好使用列表推导或普通循环。

我想打印列表中所有元素的XOR&#ed; ed值。

# 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中的参考或代码,如果有的话。)

1 个答案:

答案 0 :(得分:9)

虽然Guido van Rossum并不关心c.COLNAME,但社区中有足够的人想要它,这就是为什么它被移到reduce()并且没有完全删除的原因。它具有高性能,理想适合您的用例。 只需使用

使用operator.xor()可以使案例更快,更易读,以避免lambda的新Python框架的开销:

functools

from functools import reduce from operator import xor reduce(xor, [1, 3, 2, 3, 4, 4, 5, 2, 1]) xor()都在C中实现。与调用另一个C函数相比,调用reduce()的Python解释器循环非常慢。

如果您真的必须使用某个功能,请使用

lambda

使用就地XOR和更好的变量名称。