使用xor()的Python等效sum()函数

15 投票
3 回答
8584 浏览
提问于 2025-04-17 13:56

我喜欢Python的求和函数:

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

我想要用异或(^)来实现和的功能,而不是用加法(+)。我想用map这个函数,但我不知道该怎么做。有什么提示吗?

我对这个结果不满意:

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

我想用map写成一行代码。有什么提示吗?

3 个回答

2

一行代码

eval( '^'.join( str(n) for n in nums ) )

nums: 一个整数数组

解释

假设 nums = [7,2,1,8,3,1]

'^'.join( [ str(n) for n in nums ] ) 会把 nums 连接成这样:

"7^2^1^8^3^1"

eval("7^2^1^8^3^1") 的结果是 14,这就是 XOR 和 的值,表示 nums 中所有数字的异或结果。

5

注意,从 Python 3.8 开始,引入了 赋值表达式 (PEP 572)(也就是 := 这个符号),我们可以在列表推导式中使用并更新一个变量,这样就能把一个列表的元素通过异或运算(xor)合并成一个结果:

zxor = 0
[zxor := zxor ^ x for x in [1, 0, 1, 0, 1, 0]]
# zxor = 1
27

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。

有些时候,我们会遇到一些问题,比如数据格式不对,或者数据丢失了。这就像你在倒水的时候,发现杯子有个洞,水漏了出去。

为了避免这些问题,我们可以使用一些工具或者方法来确保数据能够顺利地转移。比如,我们可以检查数据的格式,确保它是正确的,就像在倒水之前先检查杯子有没有破损。

总之,处理数据的时候,要小心谨慎,确保每一步都能顺利进行,这样才能得到想要的结果。

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

import operator
zxor = reduce(operator.xor, z, 0)

撰写回答