12

我喜欢 Python 的 sum 函数:

>>> z = [1] * 11
>>> zsum = sum(z)
>>> zsum == 11
True

我想要使​​用 xor (^) 而不是添加 (+) 的相同功能。我想使用地图。但我无法弄清楚如何做到这一点。有什么提示吗?

我对此不满意:

def xor(l):
    r = 0
    for v in l: r ^= v
    return v

我想要一个使用地图的 1 班轮。提示?

4

2 回答 2

23
zxor = reduce(lambda a, b: a ^ b, z, 0)

import operator
zxor = reduce(operator.xor, z, 0)
于 2013-01-28T13:24:46.327 回答
3

请注意,开始Python 3.8,并引入赋值表达式(PEP 572):=运算符),我们可以使用和更新列表推导式中的变量,从而将列表简化为其元素的异或:

zxor = 0
[zxor := zxor ^ x for x in [1, 0, 1, 0, 1, 0]]
# zxor = 1
于 2019-04-28T13:38:05.937 回答