【问题标题】:How does a Python reduce XORing two indices on a lambda variable work?Python 如何减少对 lambda 变量的两个索引进行异或运算?
【发布时间】: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,并且 vi 是数组 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


【解决方案1】:

vlambda(或第一次调用时0)返回的最后一个值,i 是一个元组(<index of item in A>, <item in A>)。这些元组由enumerate 生成。

【讨论】:

    【解决方案2】:

    带有描述性的变量名...

    reduce(lambda xorSoFar, nextIndexAndValue:
                  xorSoFar ^ nextIndexAndValue[0] ^ nextIndexAndValue[1],
           enumerate(values),
           0)
    

    【讨论】:

    • 我猜不赞成票意味着当问题是对变量所包含的内容的误解时,告诉他们变量所包含的内容是不好的?
    • 我认为这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-10-19
    • 2016-09-25
    • 2019-02-06
    • 1970-01-01
    • 2019-06-21
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多