Python 高階関数 #2 reduce

株式会社リュディアです。今回は高階関数の 1 つである reduce についてまとめてみたいと思います。ここでは高階関数という用語は別にして reduce の使い方を見ていきます。

前回までの高階関数のまとめへのリンクは以下を参考にしてください。

reduce はイテラブルなオブジェクトのそれぞれに何らかの関数で定義された処理を施してイテラブルでないオブジェクトを返します。前回にまとめた map はイテラブルなオブジェクトを返しましたね。違いを意識してください。具体例を見ていきましょう。

from functools import reduce
from operator import add

l_num = [0, 1, 2, 3, 4]

reduce_result = reduce(add, l_num)
print(reduce_result)

reduce_result_init = reduce(add, l_num, 1000)
print(reduce_result_init)

# 10 (reduce0 + 1 + 2 + 3 + 4 の計算結果を返す)
# 1010 (reduce1000 + 0 + 1 + 2 + 3 + 4 の計算結果を返す)

ここでは add オペレータを使います。またイテラブルなオブジェクトとしてリスト l_num を定義します。この l_num の要素をすべて add つまり加算して合計値を返すのが reduce の動きになります。また 3 つめの引数で初期値を設定できます。2つめの例では初期値 1000 を設定し、1000 に l_num の要素をすべて加算した結果として 1010 を返します。これが reduce の動作になります。

map のまとめ記事と同様に内包表記でも記述できるのでしょうか?以下の例を見てください。

l_num = [0, 1, 2, 3, 4]

reduce_result = sum(x for x in l_num)
print(reduce_result)

# 10

ここでは sum 演算子を使うことで reduce 関数と同じ結果を得ています。前回のまとめ記事で私個人は map を使わなくなったと書きましたが、reduce は結構使っています。感覚的に reduce という単語が要素をまとめて 1 つの型を返す、という動きに合致しているように思えるためです。ここらは好みですね。

高階関数に関するまとめの続きは以下からどうぞ。

では、ごきげんよう。



この記事が気に入ったらサポートをしてみませんか?