reduceというメソッド
functools.reduce(function, iterable[, initializer])
これが優秀なのではないかと思う。
説明文を引用すると
2 引数の function を iterable の要素に対して左から右に累積的に適用し、イテラブルを単一の値に縮約します。左引数 x は累計の値で、右引数 y は iterable から取り出した更新値です。オプションの initializer が存在する場合、計算の際にイテラブルの先頭に置かれ、またイテラブルが空の場合のデフォルトになります。initializer が与えられておらず、iterable が単一の要素しか持っていない場合、最初の要素が返されます。(http://docs.python.jp/3/library/functools.html#functools.reduce)
例えばでラムダ式が挙がっていて読めなかったので学んだが、
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) は ((((1+2)+3)+4)+5)
これはoperator
のmul
を使うと、
functools.reduce(mul,[1,2,3,4,5])
と書ける。
どちらにせよ、reduce
によって、今まで
for i in a: ans+= i
や
for i in a: ans += func(i)
と書いていたものが省けるということだ、と推測している。使いこなしたい。。。