使用reduce(),Python理解复杂的代码

时间:2012-05-03 09:58:10

标签: python reduce

有人可以在下面的例子中解释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,“”)并给我一些类似的例子吗? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

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

大致翻译为

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

答案 1 :(得分:3)

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正在做类似的事情,即追加字符串(从整数转换后):(我真的希望那些parens匹配......)

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

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

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

答案 2 :(得分:2)

代码将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