Python の map, filter, reduce の使い分け

map, filter, reduce は関数型プログラミングの基本となる高階関数です。それぞれ異なる目的を持ち、適切に使い分けることでコードが簡潔になります。

map:すべての要素を変換する

map は各要素に関数を適用し、変換結果を返します。

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # [1, 4, 9, 16, 25]

filter:条件に合う要素を抽出する

filter は条件を満たす要素だけを残します。

numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # [2, 4, 6]

reduce:要素を累積して単一の値にする

reduce は functools モジュールにあり、要素を順番に処理して最終的に 1 つの値を返します。

from functools import reduce

numbers = [1, 2, 3, 4, 5]
total = reduce(lambda acc, x: acc + x, numbers)
print(total)  # 15

第 3 引数で初期値を指定できます。

total = reduce(lambda acc, x: acc + x, numbers, 100)
print(total)  # 115

使い分けの指針

目的関数
各要素を変換map数値を 2 乗する
条件で絞り込みfilter偶数だけ抽出
単一の値に集約reduce合計を求める

リスト内包表記で書ける場合はそちらが好まれることも多いですが、関数を渡す場面では map や filter が簡潔です。reduce は累積計算が必要なときに威力を発揮します。