【发布时间】:2018-06-08 14:18:39
【问题描述】:
# 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] 是可能的相矛盾,因为您不能从整数中选择索引。
如果有人可以将 reduce 扩展为 for 循环或更好地解释这段代码如何满足上面的注释,我将非常感激。
谢谢!
【问题讨论】:
-
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])calculates((((1+2)+3)+4)+5), -
请注意,xor 是可交换的和关联的:
A ^ B=B ^ A和(A ^ B) ^ C=A ^ (B ^ C)。因此,只要它们在所有输入上完成,它们以什么顺序完成并不重要。 (但你是对的,v是索引,i是元素。) -
请发布您到目前为止尝试过的内容,以及您在哪里遇到问题。查看[SO]: How to ask 或[SO]: mcve 了解更多询问相关详情。这个问题不遵循SO gidelines。这个问题很有可能会因为“太宽泛”而被关闭..
-
@torek 不,
v不是索引,i不是元素(除非“元素”是指索引+元素元组)。 -
@StefanPochmann:哎呀,是的,我写的时候看错了部分。正如您在回答中指出的那样,
v是迄今为止的价值。
标签: python functional-programming reduce