functools
のreduce
関数を使って、リストの中身を全て足したり掛けたり、といった操作を行えます。
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)
を計算していることになります。