【问题标题】:Understanding complex code with reduce(), Python用 reduce() 理解复杂代码,Python
【发布时间】:2012-05-12 19:58:31
【问题描述】:

谁能在下面的例子中解释一下reduce()的结构:

def f2(list):
        return reduce(lambda string, item: string + chr(item), list, "")

我知道 f2 将 int 列表转换为字符串,但我的问题是理解 在这种情况下减少。 我知道 reduce 的基本结构是 reduce(function, sequence[, initial]) 但这 不知何故让我感到困惑。 有人可以解释 reduce(lambda string, item: string + chr(item), list, "") 并给我一些类似的例子吗? 提前致谢。

【问题讨论】:

  • 注意builtinsmodules在这段代码中用作名称,例如liststring,这不是一个好的做法。也不要太担心reduce,因为通常有更好的方法来做某事而不使用reduce
  • 这个写法更合适"".join(map(chr, list))

标签: python reduce


【解决方案1】:

Reduce 执行通常称为fold 的操作。例如,如果您有一个列表 ls = [a,b,c,d] 和一个二元运算 def plus(x,y): x + y,那么 reduce(plus, ls)折叠

plus(plus(plus(a, b), c), d)

等于

(((a+b)+c)+d)

您的f2 正在做类似的事情,即附加字符串(在将它们从整数转换后):(我真的希望这些括号匹配......)

(((("" + chr(a)) + chr(b)) + chr(c)) + chr(d))

提供的初始值为""(当折叠操作有两种不同的输入类型时需要)

@python 专家:我不确定reduce 是不是左折叠,对我来说似乎更自然。如果我错了,请告诉我。

【讨论】:

    【解决方案2】:
    return reduce(lambda string, item: string + chr(item), list, "")
    

    大致翻译成

    string = ""
    for item in list:
        string = string + chr(item)
    return string
    

    【讨论】:

      【解决方案3】:

      代码将chr() 应用于列表的每个元素,并将结果连接成一个字符串。

      reduce() 调用等价于:

      return "" + chr(list[0]) + chr(list[1]) + ... + chr(list[list.length - 1])
      

      ""reduce() 的第三个参数。中的 lambda 函数

      return reduce(lambda string, item: string + chr(item), list, "")
      

      为列表中的每个项目调用。它只是将chr(item) 附加到上一次迭代的结果中。

      有关使用reduce() 的更多示例,请参阅Useful code which uses reduce() in python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 2010-11-16
        • 2016-11-09
        • 2014-10-19
        相关资源
        最近更新 更多