【Python】lambda(ラムダ式)の使い方を初心者向けに徹底解説!sorted・map・filterとの組み合わせまで

Python lambdaの使い方

※このサイトの記事内では広告を掲載している場合があります。

「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))  # 5

lambdaには 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から、ぜひ手を動かして試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA