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は通常フォールドと呼ばれることを行います。たとえば、リストls = [a,b,c,d]と2項演算がある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))

提供された初期値""(フォールディング操作に2つの異なる入力タイプがある場合に必要)

@ pythonの専門家:reduce左折りかどうかはわかりませんが、私にはもっと自然に見えました。私が間違っているかどうか教えてください。

于 2012-05-03T10:21:50.640 に答える
2

このコードはchr()リストのすべての要素に適用され、結果を1つの文字列に連結します。

このreduce()呼び出しは、次と同等です。

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

はの""3番目の引数reduce()です。のラムダ関数

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

リスト内のすべてのアイテムに対して呼び出されます。chr(item)前の反復の結果に追加するだけです。

の使用例については、Pythonでreduce()を使用する便利なコードをreduce()参照してください。

于 2012-05-03T10:00:25.863 に答える