Pythonのラムダ式とリスト内包表記の違いを理解しよう!初心者でもわかる使い分け
生徒
「Pythonでよく見かけるラムダ式とリスト内包表記って、どちらも一行で書けるから混乱しちゃいます。どんな違いがあるんですか?」
先生
「ラムダ式とリスト内包表記は似ているようで、役割や使い方が違います。どちらも『簡潔に書く方法』ですが、ラムダ式は『小さな関数』、リスト内包表記は『リストを作る表現』なんですよ。」
生徒
「具体的にどう違うか、わかりやすい例で教えてほしいです!」
先生
「では、一緒に見ていきましょう!」
1. ラムダ式とは?
ラムダ式は「名前のない小さな関数」です。普通の関数はdefで名前をつけて作りますが、ラムダ式はその場で使う簡単な関数を一行で書けます。
例えば、数字を2倍にする関数はこう書きます。
def double(x):
return x * 2
これをラムダ式で書くと、
lambda x: x * 2
「lambdaの後に引数を書き、コロンの後に処理を書く」という形です。
2. リスト内包表記とは?
リスト内包表記は、新しいリストを簡単に作る方法です。あるリストのすべての要素に対して処理をして、新しいリストを作りたいときに使います。
たとえば、数字を2倍にして新しいリストを作るには、普通はこう書きます。
numbers = [1, 2, 3, 4]
doubled = []
for n in numbers:
doubled.append(n * 2)
リスト内包表記なら一行で書けます。
doubled = [n * 2 for n in numbers]
「[処理 for 変数 in リスト]」の形で、新しいリストを作っています。
3. ラムダ式とリスト内包表記の大きな違い
簡単に言うと、
- ラムダ式:その場で使う小さな関数を作る
- リスト内包表記:リストを効率よく作るための表記
つまり、ラムダ式は「関数そのもの」、リスト内包表記は「リストを作る方法」なので、使う目的が違います。
4. 具体例で違いを確認しよう
数字を2倍にする処理で比べてみます。
4-1. ラムダ式を使う例
ラムダ式は関数なので、別の関数に渡したりできます。
numbers = [1, 2, 3, 4]
double_func = lambda x: x * 2
doubled = list(map(double_func, numbers))
print(doubled)
この例では、map関数にラムダ式を渡してリストのすべての数字を2倍にしています。
実行結果はこうなります。
[2, 4, 6, 8]
4-2. リスト内包表記を使う例
numbers = [1, 2, 3, 4]
doubled = [x * 2 for x in numbers]
print(doubled)
こちらもリストの中の数字を2倍にしています。forループと同じ動きをしますが、簡潔に書けます。
実行結果は先ほどと同じです。
[2, 4, 6, 8]
5. 使いどころの違い
ラムダ式は「関数を渡すとき」や「関数が必要な場面」に使います。たとえば、ソートやフィルター処理でよく使います。
リスト内包表記は「新しいリストを作りたいとき」に便利で、簡単に読みやすく書けます。
つまり、両者は目的が違うため、同じ場面で使うことは少ないです。
6. まとめではありませんが最後に
Pythonのラムダ式とリスト内包表記はどちらも便利な機能ですが、ラムダ式は「関数」、リスト内包表記は「リストを作る表現」です。使い方や場面を理解して、適切に使い分けましょう。