Python reduce 如何对 lambda 变量上的两个索引进行异或运算?
How does a Python reduce XORing two indices on a lambda variable work?
# Compute the XOR of all numbers from 0 to |A| - 1 and all entries in A
# Assume A is a list of integers
miss_XOR_dup = functools.reduce(lambda v, i: v ^ i[0] ^ i[1], enumerate(A), 0)
我相信函数开始累加的值是 0 并且 v 和 i 是的索引和元素值数组 A 中的项目。然而,有点令人困惑的是 v 不代表“值”而是代表“索引”,反之亦然代表 i。这也与代码 i[0]
是可能的相矛盾,因为你不能 select 来自整数的索引。
如果有人可以将 reduce 扩展为 for 循环或更好地解释这段代码如何实现上面的注释,我将不胜感激。
谢谢!
v
是 lambda
返回的最后一个值(或 0
在第一次调用时),i
是一个元组 (<index of item in A>, <item in A>)
。这些元组由 enumerate
.
生成
具有描述性变量名称...
reduce(lambda xorSoFar, nextIndexAndValue:
xorSoFar ^ nextIndexAndValue[0] ^ nextIndexAndValue[1],
enumerate(values),
0)
# Compute the XOR of all numbers from 0 to |A| - 1 and all entries in A
# Assume A is a list of integers
miss_XOR_dup = functools.reduce(lambda v, i: v ^ i[0] ^ i[1], enumerate(A), 0)
我相信函数开始累加的值是 0 并且 v 和 i 是的索引和元素值数组 A 中的项目。然而,有点令人困惑的是 v 不代表“值”而是代表“索引”,反之亦然代表 i。这也与代码 i[0]
是可能的相矛盾,因为你不能 select 来自整数的索引。
如果有人可以将 reduce 扩展为 for 循环或更好地解释这段代码如何实现上面的注释,我将不胜感激。
谢谢!
v
是 lambda
返回的最后一个值(或 0
在第一次调用时),i
是一个元组 (<index of item in A>, <item in A>)
。这些元组由 enumerate
.
具有描述性变量名称...
reduce(lambda xorSoFar, nextIndexAndValue:
xorSoFar ^ nextIndexAndValue[0] ^ nextIndexAndValue[1],
enumerate(values),
0)