「sorted()のkeyにlambdaを渡すと書いてあるけれど、lambdaって何?」「map()やfilter()の例にlambdaが出てきて、そこで読むのが止まってしまった」という経験はありませんか? lambda(ラムダ式)は、Pythonの学習で多くの人が一度はつまずくポイントです。
この記事では、lambdaを「名前を付けずにその場で作る小さな関数」として、初心者向けに順を追って解説します。def との違い、sorted・map・filter・max との組み合わせ、使いすぎてはいけない場面まで、実際に動くコードで確認していきましょう。
lambda(ラムダ式)とは?
lambdaは、1行で書ける無名関数(名前のない関数)を作る構文です。基本の形は次のとおりです。
lambda 引数: 返す値たとえば「2つの数を足す関数」を、def と lambda で書き比べてみます。
# def で書いた場合
def add(a, b):
return a + b
# lambda で書いた場合
add_lambda = lambda a, b: a + b
print(add(2, 3)) # 5
print(add_lambda(2, 3)) # 5lambdaには return を書きません。コロンの右側に書いた式の結果が、そのまま戻り値になります。関数の作り方そのものに不安がある方は、先に関数(def)の作り方を読んでおくと理解しやすくなります。
lambdaの基本的な使い方
引数が1つ・複数・なしの場合
square = lambda x: x ** 2
print(square(4)) # 16
mul = lambda a, b, c: a * b * c
print(mul(2, 3, 4)) # 24
hello = lambda: "こんにちは"
print(hello()) # こんにちは条件式(三項演算子)と組み合わせる
lambdaの中では if 文は書けませんが、条件式(三項演算子)なら使えます。
judge = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(judge(10)) # 偶数
print(judge(7)) # 奇数sorted()のkeyにlambdaを使う
lambdaが最も活躍するのが、並べ替えの基準を指定する場面です。sorted()やlist.sort()のkey引数には「何を基準に並べるか」を返す関数を渡します。
words = ["banana", "fig", "apple"]
# 文字数の短い順に並べ替え
print(sorted(words, key=lambda w: len(w)))
# ['fig', 'apple', 'banana']
students = [("田中", 80), ("佐藤", 95), ("鈴木", 70)]
# 点数(2番目の要素)の高い順に並べ替え
print(sorted(students, key=lambda s: s[1], reverse=True))
# [('佐藤', 95), ('田中', 80), ('鈴木', 70)]sorted() と sort() の違いはsorted・sortの使い方で詳しく解説しています。
ここまでのコードで「なんとなく分かったけれど、自分で書くと手が止まる」という方は、独学の進め方を見直すタイミングかもしれません。学習環境の選び方はPythonが学べるプログラミングスクールの比較記事にまとめているので、参考にしてください。
map()・filter()と組み合わせる
リストの全要素に同じ処理をするmap()、条件に合う要素だけを取り出すfilter()も、lambdaとセットで使われることが多い関数です。
nums = [1, 2, 3, 4, 5, 6]
doubled = list(map(lambda x: x * 2, nums))
print(doubled) # [2, 4, 6, 8, 10, 12]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4, 6]map・filterそのものの仕組みはmap・filter関数の解説記事で扱っています。なお、同じことはリスト内包表記でも書けます。実務ではこちらのほうが読みやすいと感じる人も多いので、リスト内包表記の記事もあわせて確認してみてください。
max()・min()で「最大の要素」を探す
辞書のリストから「値段が最も高い商品」を探すような場面でも、keyにlambdaを渡せます。
items = [
{"name": "りんご", "price": 120},
{"name": "みかん", "price": 80},
{"name": "ぶどう", "price": 300},
]
print(max(items, key=lambda i: i["price"]))
# {'name': 'ぶどう', 'price': 300}
print(min(items, key=lambda i: i["price"]))
# {'name': 'みかん', 'price': 80}lambdaを使うときの注意点
- 複雑な処理は def で書く:lambdaは1つの式しか書けません。処理が複雑になるなら、名前を付けた関数にしたほうが読みやすく、テストもしやすくなります。
- lambdaを変数に代入しすぎない:add = lambda a, b: a + b のように名前を付けるなら、最初から def を使うのが一般的です。lambdaは「その場で一度だけ使う」ときに向いています。
- 読みにくくなったらやめる:lambdaを入れ子にしたり長い式を詰め込んだりすると、あとから読み返せなくなります。チーム開発では特に注意しましょう。
よくある質問
Q. lambdaとdefはどちらを使うべき?
基本は def で問題ありません。sorted・max・min・map・filter の引数として「一度だけ使う短い処理」を渡すときに lambda を使う、と覚えておけば十分です。
Q. lambdaの中で複数行の処理はできますか?
できません。lambdaは式を1つだけ書ける構文です。複数の処理が必要な場合は def で関数を定義しましょう。
Q. lambdaは実務でも使いますか?
使います。特にsortedのkey指定や、pandasなどデータ処理ライブラリでの列変換で頻繁に登場します。読めるようになっておくと、他人のコードの理解がぐっと楽になります。
もっと効率的にPythonを学びたい人へ
lambdaのような「読めば分かるけれど、自分で使いこなすのが難しい」文法は、独学だと疑問を抱えたまま先へ進みがちです。マンツーマン指導のスクールなら、つまずいた箇所をその場で質問でき、未経験からでも体系的にPythonを習得できます。転職サポートや無料カウンセリングを用意しているスクールもあるので、まずは話を聞いてみるのも一つの方法です。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
スクール選びの基準は、プログラミングスクールの徹底比較記事で整理しています。資格取得を目指す方はPython資格の参考書・教材の比較記事も参考にしてください。
まとめ
- lambdaは「lambda 引数: 返す値」で書く、名前のない1行の関数
- return は不要で、コロンの右側の式の結果が戻り値になる
- sorted・sort・max・minのkey引数で、並べ替えや比較の基準を指定するときに便利
- map・filterと組み合わせると、リストの変換や絞り込みを短く書ける
- 複雑な処理や何度も使う処理は、lambdaではなく def を使う
lambdaは「小さな処理をその場で渡すための道具」と割り切ると、怖くなくなります。まずはsortedのkeyから、ぜひ手を動かして試してみてください。
ナノトイラボ 
