事例:総和を求める

関数 reduce の典型的な利用法のひとつが、数列の総和を求めるというものです。

>>> reduce(lambda acc,e: acc+e, range(101), 0)5050

ここでは、整数 0〜100 の和を求めています。この事例は、数学の世界で偉大な足跡を残したガウスが、幼年期に「1 から 100 までの数字を足す」式を教師が黒板に書き終える前に「答えは 5050 (=101×50) になる」としたエピソードとしても有名です。
第1引数 function には(引数が2つ必要な)関数を指定します。ここでは、lambda 関数の第1引数 acc に初期値を与えると、それに続く途中経過を保持するとともに、その第2引数 e は(reduce の第2引数)range(101) の各要素を参照します。
第2引数 sequence には、任意のシーケンスを指定します。ここでは、総和を求める対象として、0 から 100 までの整数を列挙したリストを与えます。
第3引数 initial には、任意の初期値を指定します。第2引数に空シーケンスを与えると、その総和は初期値と同じ 0 になります。

>>> reduce(lambda acc,e: acc+e, range(101))5050

第3引数を省略すると、range(101) の先頭要素 0 が初期値になります。すると、((((0+1)+2)+3)+...)+100 という過程を経て、リターン値 5050 が得られます。

>>> reduce(lambda acc,e: acc+e, [], -1)-1

空リスト [] を与えると、初期値 -1 がそのまま、リターン値として得られます。


Previous|1/5|Next