0

有人可以在以下示例中解释 reduce() 的结构:

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

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

4

3 回答 3

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

大致翻译为

string = ""
for item in list:
    string = string + chr(item)
return string
于 2012-05-03T10:10:44.560 回答
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正在做类似的事情,即附加字符串(在将它们从整数转换之后):(我真的希望那些括号匹配......)

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

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

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

于 2012-05-03T10:21:50.640 回答
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)到上一次迭代的结果。

有关 using 的更多示例reduce(),请参阅在 python 中使用 reduce() 的有用代码

于 2012-05-03T10:00:25.863 回答