【Python】lambda(無名関数)でコードをスッキリ!map/filter/sortedの実例つき解説

はじめに

Pythonを書いていると、ちょこちょこ出てくる「lambda」というキーワード。
「無名関数」とも呼ばれていて、関数に名前を付けずにサクッと一行で処理を書ける便利な機能です。

最初は「なんだこれ?」と思いがちですが、慣れてくると mapfiltersorted と組み合わせてコードをスッキリさせられます。実務でもよく登場するので、ここで一度まとめておきましょう!


やりたいこと

  1. 一行で書ける簡単な関数の作成

  2. mapfiltersorted と組み合わせて使う方法

  3. 実務での利用シーン(CSV処理やデータ抽出)


準備するもの

ライブラリ

今回の内容は標準ライブラリだけで完結します。追加のインストールは不要です。

インポート手順

特にありません。必要に応じて csvos をインポートします。

import csv

このライブラリの説明

  • csv: CSVファイルの読み書きをサポートしてくれる標準ライブラリ。実務で「データ抽出」や「変換」に便利です。


ディレクトリ構成

lambda_blog/
├── sample.csv
└── main.py

コードスクリプト

コードスクリプトの概要

ここでは3ステップでlambdaの使い方を紹介します。

  1. lambdaの基本(四則演算など)

  2. mapfiltersorted と組み合わせる例

  3. 実務例(CSVから数値データだけ抽出)


1. lambdaの基本

# 通常の関数定義
def add(x, y):
return x + y

print(add(3, 5)) # 8

# lambdaで書くと一行
add_lambda = lambda x, y: x + y
print(add_lambda(3, 5)) # 8

👉 ポイント

  • lambda 引数: 処理 の形で書けます。

  • わざわざ def で関数を作らなくてもOK。


2. map, filter, sorted と組み合わせる

numbers = [1, 2, 3, 4, 5, 6]

# map: 各要素を2倍にする
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # [2, 4, 6, 8, 10, 12]

# filter: 偶数だけ抽出
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4, 6]

# sorted: 文字列を長さ順に並べ替え
words = ["Python", "AI", "Programming", "Data"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words) # ['AI', 'Data', 'Python', 'Programming']

👉 ポイント

  • map: 全要素に処理を適用したいとき

  • filter: 条件に合う要素だけ取り出したいとき

  • sorted: 並び替えの基準を柔軟に決めたいとき


3. 実務例: CSVから数値データだけ抽出

例えばこんなCSVがあったとします。

sample.csv
id,name,score
1,Alice,85
2,Bob,90
3,Charlie,N/A
4,David,72

この中から「数値データだけ取り出して平均を出す」スクリプトを作ります。

import csv

with open("sample.csv", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
scores = list(
filter(
lambda x: x.isdigit(),
[row["score"] for row in reader]
)
)

# 数値に変換
scores = list(map(int, scores))
print(scores) # [85, 90, 72]

# 平均値
average = sum(scores) / len(scores)
print("平均点:", average)

実行結果

[85, 90, 72]
平均点: 82.33333333333333

👉 ポイント

  • filterisdigit() を使い「数値だけ」抽出

  • map で文字列を int に変換

  • 実務では「欠損値が混ざるデータ処理」でめちゃくちゃ役立ちます


注意点

  • lambdaは一行で書ける分、複雑な処理を詰め込みすぎると逆に読みにくくなります。

  • def で普通に関数を定義した方がわかりやすいケースも多いです。

  • 「簡単な処理」かつ「一度しか使わない処理」に限定して使うのがおすすめです。

コメント

タイトルとURLをコピーしました