はじめに
Pythonを書いていると、ちょこちょこ出てくる「lambda」というキーワード。
「無名関数」とも呼ばれていて、関数に名前を付けずにサクッと一行で処理を書ける便利な機能です。
最初は「なんだこれ?」と思いがちですが、慣れてくると map
や filter
、sorted
と組み合わせてコードをスッキリさせられます。実務でもよく登場するので、ここで一度まとめておきましょう!
やりたいこと
-
一行で書ける簡単な関数の作成
-
map
、filter
、sorted
と組み合わせて使う方法 -
実務での利用シーン(CSV処理やデータ抽出)
準備するもの
ライブラリ
今回の内容は標準ライブラリだけで完結します。追加のインストールは不要です。
インポート手順
特にありません。必要に応じて csv
や os
をインポートします。
このライブラリの説明
-
csv
: CSVファイルの読み書きをサポートしてくれる標準ライブラリ。実務で「データ抽出」や「変換」に便利です。
ディレクトリ構成
コードスクリプト
コードスクリプトの概要
ここでは3ステップでlambdaの使い方を紹介します。
-
lambdaの基本(四則演算など)
-
map
、filter
、sorted
と組み合わせる例 -
実務例(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 と組み合わせる
👉 ポイント
-
map
: 全要素に処理を適用したいとき -
filter
: 条件に合う要素だけ取り出したいとき -
sorted
: 並び替えの基準を柔軟に決めたいとき
3. 実務例: CSVから数値データだけ抽出
例えばこんな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)
実行結果
👉 ポイント
-
filter
でisdigit()
を使い「数値だけ」抽出 -
map
で文字列をint
に変換 -
実務では「欠損値が混ざるデータ処理」でめちゃくちゃ役立ちます
注意点
-
lambdaは一行で書ける分、複雑な処理を詰め込みすぎると逆に読みにくくなります。
-
def
で普通に関数を定義した方がわかりやすいケースも多いです。 -
「簡単な処理」かつ「一度しか使わない処理」に限定して使うのがおすすめです。
コメント