reduce()関数はシーケンスの個々の要素に同じ関数を適用することに使うことができます。
reduce()はfunctoolsというモジュールにあるfromとimportによる明示が必要です。
reduce()が簡単にどんなことをするか見てみましょう。
1 2 3 4 5 |
>>> from functools import reduce #必須です >>> reduce((lambda x, y: x + y), [1, 2, 3, 4, 5]) 15 #1+2=3 3+3=6 6+4=10 10+5=15 結果的には1+2+3+4+5の結果となっている |
上の例では、まずシーケンスの0番目と1番目の要素を引数として足し合わせて(1+2)、次にその結果できた値(3)と2番目の要素(3)を引数として足し合わせて...というような繰り返しをしています。
これはreduce()関数を使うことなく表現することもできます。
1 2 3 4 5 6 7 |
>>> list = [1, 2, 3, 4, 5] >>> result = list[0] >>> for x in list[1:]: ... result = result + x ... >>> result 15 |
あるリストやあるタプルがあって、それに同じような処理をして結果を出したいと思った時に、
for文を使うよりもreduce()を使ったほうがプログラムがシンプルに収まることがあります。
そして、プログラムを考える上で「関数」という単位を扱うと、組み立てが非常に気持ち良いです。
reduce()関数はいわゆる「関数プログラミング」にとても役立つので、使う場面が出てきたら積極的に導入を考えてみましょう!