サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

Python reduce関数

functoolsreduce関数を使って、リストの中身を全て足したり掛けたり、といった操作を行えます。

from functools import reduce
from operator import add, mul

a = [1, 2, 3, 4] # 適当なリスト

reduce(add, a) # 総和
> 10
reduce(mul, a) # 総乗
> 24

こんな感じ。
ちなみに

reduce(add, a)は
reduce(lambda x, y: x+y, a)

reduce(mul, a)は
reduce(lambda x, y: x*y, a)

と同値です。

reduce関数は、第一引数の関数に第二引数のリストの要素をどんどん突っ込んで、その値を累積的に計算していきます。
“関数の"第一引数には累計の値、第二引数には更新値が入ります。例えば、上記の例のreduce(add, a)(((1+2)+3)+4)を計算していることになるのです。

また、reduceは第三引数'initializer'を取ることもできて、これは累計の値の初期値になります。reduce(add, a, 10)(もしくはreduce(add, a, initializer=10))は、((((10+1)+2)+3)+4)を計算していることになります。