カテゴリ: Python 更新日: 2026/02/02

Pythonの関数型プログラミング入門!map, filter, reduce の活用方法

Pythonの関数型プログラミング入門!map, filter, reduce の活用方法
Pythonの関数型プログラミング入門!map, filter, reduce の活用方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonで同じような処理をまとめて書く方法ってありますか?」

先生

「ありますよ!その一つが関数型プログラミングの仕組みで、mapfilterreduceを使う方法です。」

生徒

「mapやfilter、reduceって難しそうって思ったんですが、初心者でも使えますか?」

先生

「大丈夫です!簡単な例えを使って丁寧に説明しますね。」

1. mapって何?リストの中身を一気に変える

1. mapって何?リストの中身を一気に変える
1. mapって何?リストの中身を一気に変える

mapは「まとまったデータを順番に処理して、新しいデータをつくる」関数です。例えると、リンゴを全部皮を剥いてリンゴジュースを作るイメージです。


nums = [1, 2, 3, 4]
def square(x):
    return x * x

squares = list(map(square, nums))
print(squares)

[1, 4, 9, 16]

このように、リストの中の数をすべて「二乗する」処理をまとめてできます。

2. filterって何?リストから条件に合うものだけ選ぶ

2. filterって何?リストから条件に合うものだけ選ぶ
2. filterって何?リストから条件に合うものだけ選ぶ

filterは、「条件に当てはまるデータだけを取り出す」関数です。たとえば、おいしいリンゴだけ選ぶイメージです。


nums = [1, 2, 3, 4, 5, 6]
def is_even(x):
    return x % 2 == 0

evens = list(filter(is_even, nums))
print(evens)

[2, 4, 6]

このように、偶数だけを取り出すことができます。

3. reduceって何?リストを一つの値にまとめる

3. reduceって何?リストを一つの値にまとめる
3. reduceって何?リストを一つの値にまとめる

reduceは、リストの値を一つにまとめるときに使います。たとえば、みんなで材料を混ぜて一つのケーキを作る感じです。

使うには、functoolsというライブラリから呼び出します。


from functools import reduce

nums = [1, 2, 3, 4]
def add(x, y):
    return x + y

total = reduce(add, nums)
print(total)

10

このように、リストの数字をすべて足して一つの合計にまとめられます。

4. map・filter・reduce を組み合わせる

4. map・filter・reduce を組み合わせる
4. map・filter・reduce を組み合わせる

これらは組み合わせても使えます。たとえばリストから偶数を取り出して二乗して合計する例です。


from functools import reduce

nums = [1, 2, 3, 4, 5, 6]
evens = filter(lambda x: x % 2 == 0, nums)
squares = map(lambda x: x * x, evens)
total = reduce(lambda a, b: a + b, squares)
print(total)

56

このコードで「偶数だけ二乗して、合計する」を一度に処理できます。

5. lambda式(ラムダ式)を使ってシンプルに書く

5. lambda式(ラムダ式)を使ってシンプルに書く
5. lambda式(ラムダ式)を使ってシンプルに書く

lambdaは、「その場で使う小さな関数」を書くときに使います。次のように短く書けます。


from functools import reduce

nums = [1, 2, 3, 4, 5, 6]
total = reduce(lambda a, b: a + b,
               map(lambda x: x * x,
                   filter(lambda x: x % 2 == 0, nums)))
print(total)

56

難しそうに見えますが、「一列に処理をつなげる」考え方を理解すると、スッキリ書けます。

6. なぜmap/filter/reduceを使うの?メリットは?

6. なぜmap/filter/reduceを使うの?メリットは?
6. なぜmap/filter/reduceを使うの?メリットは?
  • コードが短く、読みやすくなる
  • 同じ処理をまとめて扱えて効率的
  • リスト内包表記やラムダ式と組み合わせて使いやすい

コードの流れを直感的に書けるので、初心者にもおすすめです。

7. 注意点は?初心者が気をつけたいこと

7. 注意点は?初心者が気をつけたいこと
7. 注意点は?初心者が気をつけたいこと
  • 関数の渡し方(関数名に () を付けない)に注意する
  • ラムダ式は複雑に書くと読みにくい
  • 最初はリスト内包表記と一緒に練習すると理解が早い

8. 練習してみよう

8. 練習してみよう
8. 練習してみよう

まずは短いリストを使って、mapやfilter、reduceを使って遊んでみてください。

例えば文字列リストに大文字小文字をまとめて処理するなど、いろいろ試してみましょう。

まとめ

まとめ
まとめ

ここまで、Pythonにおける関数型プログラミングの強力なツールである mapfilter、そして reduce の基本的な使い方から応用までを詳しく解説してきました。これらの関数は、従来の for ループや while ループによる反復処理を、より宣言的で簡潔なコードへと書き換えることを可能にします。

map関数の本質的な理解

map 関数は、イテラブル(リストやタプルなど)のすべての要素に対して、指定した関数を一律に適用するためのものです。これは「データの変換」を目的としています。例えば、ECサイトの価格リストに一律で消費税を加えたり、ユーザー名のリストをすべて大文字に変換したりといった、一括処理の場面で真価を発揮します。


# mapを使った価格の税込み計算例
prices = [1000, 2500, 4800]
tax_included = list(map(lambda p: int(p * 1.1), prices))
print(tax_included)

[1100, 2750, 5280]

filter関数によるデータの精査

次に、filter 関数は「データの抽出」を担います。膨大なデータセットの中から、特定の条件を満たすものだけを残し、不要なものを排除する際に利用されます。これは検索機能の裏側や、特定のステータスを持つユーザーのみを抽出するロジックなどで頻繁に使われます。条件式(述語関数)が True を返す要素のみが保持されるという仕組みを意識しましょう。


# filterを使った高額商品の抽出例
high_prices = list(filter(lambda p: p > 3000, tax_included))
print(high_prices)

[5280]

reduce関数による情報の集約

reduce 関数は、前の二つとは少し毛色が異なります。リストの要素を順次取り出し、累積的に計算を行うことで、最終的に「一つの値」へと落とし込みます。総和を求めるだけでなく、最大値を算出したり、複雑な辞書データを統合したりする場合にも応用可能です。functools モジュールからインポートする必要がある点は、忘れがちなポイントなので注意してください。


# reduceを使った文字列の連結例
from functools import reduce
words = ["Python", "は", "非常に", "強力だ"]
sentence = reduce(lambda x, y: x + y, words)
print(sentence)

Pythonは非常に強力だ

実務での活用とリスト内包表記との使い分け

Pythonには「リスト内包表記」という、これら三つの関数と似た役割を果たす構文が存在します。多くの場合、mapfilter よりもリスト内包表記の方が「Pythonらしい(Pythonic)」とされ、可読性が高いと評価されることもあります。しかし、既存の関数を再利用する場合や、関数型プログラミングの文脈で処理をパイプライン化したい場合には、今回学んだ手法が非常に有効です。

重要なのは、どちらが正しいかではなく、チームのコーディング規約や、その場のコードの読みやすさに合わせて適切な道具を選択できる柔軟性です。ラムダ式(無名関数)を多用しすぎると、かえってデバッグが困難になることもあるため、複雑な処理は def キーワードで通常の関数として定義してから map に渡すといった工夫も、プロ級のエンジニアへの第一歩となります。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!mapfilterreduceの役割がかなりはっきり見えてきました。特にmapfilterは、リスト内包表記と同じようなことができるんですね。」

先生

「その通りです!よく気づきましたね。実はPythonの世界では、単純な処理ならリスト内包表記の方が好まれることも多いんです。でも、関数を引数として渡すスタイルに慣れておくと、将来的にデータ分析やAIのライブラリを扱う時に、処理の流れがすごく理解しやすくなりますよ。」

生徒

「なるほど。使い分けが大事なんですね。reducefunctoolsの中にあるのも、あまり多用しすぎないようにというPythonの設計思想なんですか?」

先生

「鋭い洞察力ですね!reduceは処理を追いかけるのが少し大変になることがあるので、標準の組み込み関数からは外されているんです。でも、要素を畳み込んで一つにする処理にはこれ以上ない武器になります。」

生徒

「ラムダ式も、最初は呪文みたいで怖かったですけど、lambda x: x * 2みたいに『入力に対してこれをやる』という型で見るとシンプルに感じてきました。」

先生

「その感覚を忘れないでください。関数型プログラミングの考え方は、バグを減らし、コードの再利用性を高めてくれます。次は、これらの処理を使って実用的なデータ集計ツールを作ってみるのも面白いかもしれませんね。」

生徒

「はい!自分で何かプログラムを組んでみて、もっとこの便利さを体感してみたいと思います!」

カテゴリの一覧へ
新着記事
New1
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New2
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New4
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.6
Java&Spring記事人気No6
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説