使用xor()的Python等效sum()函数
我喜欢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)