在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中的参考或代码,如果有的话。)
答案 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和更好的变量名称。