スポンサーリンク

Pythonの高階関数とは?map・filter・reduceの使い方を初心者向けに解説!

Python入門

1. はじめに|Pythonの高階関数ってなに?

Pythonのコードを書いていると、「もっとスッキリ書けないかな?」「同じような処理を繰り返してて面倒だな…」と思うことってありませんか?

そんなときに便利なのが「高階関数(こうかいかんすう / higher-order functions)」という考え方です。

ちょっと難しそうな名前ですが、実はPythonをスムーズに使いこなすためのとても便利な機能なんです!


💡 高階関数ってなに?

簡単に言うと、「関数を操作できる関数」のことです。

Pythonでは、関数そのものを「値」として扱えるので、関数を別の関数に引数として渡したり、戻り値として返したりできるんです。これが「高階関数」の基本的な考え方。

たとえば、

  • リストのすべての要素を一括で2倍にしたいとき
  • 特定の条件に合うデータだけを抽出したいとき
  • リスト内の数をぜんぶ足し合わせたいとき

こんな場面で、高階関数を使えばたった1行でスパッと書けるようになります。


🧠 対象読者はこんな人!

このページは、以下のような人におすすめです。

  • Pythonを勉強し始めたばかりの初心者さん
  • map()とかfilter()とか、名前は聞いたことあるけどよく分からない人
  • コードをもっとカッコよく短く書いてみたい人

このあと紹介する3つの高階関数(mapfilterreduce)を使いこなせるようになると、Pythonの処理がグッと効率的になりますよ!




2. map()の使い方|すべての要素に同じ処理をしたいときに!

まず最初に紹介するのは map() 関数です。
これは「リストやタプルなどのすべての要素に対して、同じ処理をまとめて行いたいとき」に使える便利な関数です。


💡 どんなときに使うの?

たとえば、こんなことをやりたいときに map() が活躍します:

  • リストの中の数字を全部2倍にしたい
  • 文字列をすべて小文字に変換したい
  • すべての要素にabs()(絶対値)を適用したい

🧪 基本の構文と使い方

map(関数, 繰り返しオブジェクト)

これだけです!たったこれだけで、すべての要素に関数が適用されます。

でも注意点が1つ!
map() の戻り値は mapオブジェクト(イテレータ) なので、よく使うときは list() で変換しておくと中身が見やすくなります👇

list(map(関数, リストなど))

🛠 具体例で学ぼう!

🔹 例1:リストの全要素を2倍にする

numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 2, numbers))
print(result)

👉 出力:

[2, 4, 6, 8, 10]

🔹 例2:すべての文字列を小文字に変換

words = ["Apple", "BANANA", "Orange"]
result = list(map(str.lower, words))
print(result)

👉 出力:

['apple', 'banana', 'orange']

str.lower のように、組み込み関数を直接渡すこともできるのでとてもスッキリ書けますね!


💡 map()を使うメリット

  • for文を使わずに、一括で処理できる
  • ラムダ式を使えば、1行でスッキリ書ける
  • 処理内容が明確で、可読性も◎

次は、条件に合うデータだけを選びたいときに使える filter() 関数をご紹介します!
これも、Pythonでよく使われる高階関数の1つですよ😊




3. filter()の使い方|条件に合うものだけを取り出そう!

filter() は、**リストやタプルの中から「特定の条件に合う要素だけを取り出す」**ときに使う関数です。

「全部じゃなくて、“条件を満たすものだけ”が欲しいんだよな〜」という場面で大活躍します!


💡 どんなときに使うの?

たとえばこんなときに便利です:

  • リストから偶数だけを抽出したい
  • 文字列の中から5文字以上の単語だけを取り出したい
  • 0以上の数値だけを残したい

🧪 基本の構文と使い方

filter(条件関数, 繰り返しオブジェクト)

ここで指定する「条件関数」は、要素を1つ受け取って True または False を返す関数です。
map() と同じように、結果は filterオブジェクト(イテレータ)なので、list() で変換して使いましょう。

list(filter(関数, リストなど))

🛠 具体例で学ぼう!

🔹 例1:偶数だけを取り出す

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

👉 出力:

[2, 4, 6]

🔹 例2:5文字以上の単語を取り出す

words = ["apple", "hi", "banana", "sun", "grapefruit"]
result = list(filter(lambda w: len(w) >= 5, words))
print(result)

👉 出力:

['apple', 'banana', 'grapefruit']

🧩 map()との組み合わせもOK!

map() で一度データを加工したあとに、filter() で条件を絞る…なんて組み合わせもできます!

🔹 例:各要素に1を足して、3の倍数だけを取り出す

numbers = [1, 2, 3, 4, 5]
added = map(lambda x: x + 1, numbers)
filtered = list(filter(lambda x: x % 3 == 0, added))
print(filtered)

👉 出力:

[3, 6]

💡 filter()を使うメリット

  • 条件に合う要素を簡単に取り出せる
  • for文よりもコードが短くて読みやすい
  • 他の高階関数と組み合わせやすい

次はいよいよ「値を一つにまとめたい」ときに使う reduce() 関数を紹介します!
合計や積を求めたいときに超便利なので、ぜひ覚えておきましょう😊




4. reduce()の使い方|すべての値を1つにまとめたいときに!

reduce() は、リストやタプルの複数の要素を、ひとつの値にまとめたいときに使う関数です。

「全部の要素を足し合わせたい」「掛け合わせたい」など、“累積的な処理”をしたいときに大活躍します!


⚠ まずはインポートから!

reduce()mapfilter と違って、標準で読み込まれていないため、使う前にインポートが必要です。

from functools import reduce

🧪 基本の構文と使い方

reduce(2つの引数を取る関数, 繰り返しオブジェクト)

reduce() では、関数が「前回の結果」と「次の要素」の2つを受け取って、どんどん処理を進めていきます。

reduce(lambda x, y: x + y, [1, 2, 3, 4])

この場合の処理イメージは:

  1. 1 + 2 = 3
  2. 3 + 3 = 6
  3. 6 + 4 = 10

👉 最終的な結果は 10 になります!


🛠 具体例で学ぼう!

🔹 例1:合計値を求める

from functools import reduce

numbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, numbers)
print(result)

👉 出力:

15

🔹 例2:すべての値を掛け合わせる

from functools import reduce

numbers = [1, 2, 3, 4]
result = reduce(lambda x, y: x * y, numbers)
print(result)

👉 出力:

24

💡 reduce()を使うメリット

  • 合計や積など、ひとまとめの処理をシンプルに書ける
  • ループ処理よりも短くて明確
  • map()filter()と組み合わせて使える

❗ 注意ポイント

  • 使いどころがちょっと難しいので、無理に使うよりは「わかりやすさ重視」で for 文と使い分けるのがおすすめです。
  • ただし、処理が明確な場合(合計・積など)にはとても有効!

次は、ここまで紹介した map()filter()reduce() の違いや使い分けポイントをまとめていきます!
「結局どれをいつ使えばいいの?」という疑問にしっかり答えますよ👍




5. まとめ|map・filter・reduceでPythonをもっと簡潔に

ここまで、Pythonの高階関数である map()filter()reduce() の使い方を学んできました。

「なんか難しそう…」と思っていた方も、実際に使ってみると「便利!」「シンプルに書ける!」と感じたのではないでしょうか?


🧠 それぞれの使いどころをもう一度おさらい!

関数名主な用途戻り値の型
map()各要素に同じ処理を適用mapオブジェクト
filter()条件に合う要素だけを取り出すfilterオブジェクト
reduce()すべての要素を1つにまとめる(累積処理)単一の値

💬 高階関数は「コードの短縮」だけじゃない!

高階関数を使うことで:

  • for文よりも短くて読みやすいコードが書ける
  • データ処理の流れがハッキリするので、バグが減る
  • 他の人のコードも読みやすくなる

といったメリットがあります。

ただし、「一目でわかることが一番大事」なので、無理して使う必要はありません。
簡潔さと可読性のバランスを考えながら活用していくのがベストです😊


🚀 ステップアップのおすすめ

今回の高階関数は、今後のステップアップにもつながります。

  • **ラムダ式(無名関数)**をもっと深掘りしてみよう!
  • リスト内包表記との違いも比べてみると面白い!
  • PandasNumPyでも似たような考え方が使われてる!

これで、Pythonの高階関数 mapfilterreduce をマスターできました!
次はもっと効率よくコードを書くために、ラムダ式や内包表記もぜひチェックしてみてくださいね👇


📚 あわせて読みたい:


よくある質問(Q&A)

Q
map()filter()reduce() の違いがイマイチわかりません…
A

処理の目的に応じて使い分けましょう!

  • map():すべての要素に同じ処理をする
  • filter():条件に合う要素だけを抽出する
  • reduce():複数の要素を1つの値にまとめる

この3つは「何をしたいか?」で使い分けるのがポイントです。

Q
高階関数って初心者でも使っていいの?
A

もちろんOKです!

むしろ、Pythonらしい“美しいコード”を書くためにおすすめです。
ただし、可読性を重視して、無理せず使えるところからが良いですよ👍

Q
map()filter()list()で囲まないといけないの?
A

実行結果を見たり使いやすくしたりするには、list()で囲むのが一般的です。

map()filter() は「イテレータ型」で返ってくるので、そのままだと中身が見えません。
リストとして使いたいときは list() を使いましょう。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク