Pythonのラムダ式とfilter関数の使い方を完全ガイド!初心者でもわかるデータ抽出
生徒
「Pythonでたくさんのデータの中から、条件に合うものだけを取り出す方法ってありますか?」
先生
「はい、Pythonではfilter関数とラムダ式を使うと、簡単に条件に合ったデータだけを抽出できますよ。」
生徒
「ラムダ式ってなんですか?名前がかっこいいですね。」
先生
「ラムダ式は短く書ける関数のことです。例えば、『偶数だけ取り出す』や『100点以上だけを抽出する』といった処理を、1行で書けます。」
生徒
「すごい!ぜひ使い方を教えてください。」
1. ラムダ式とは?
Pythonのラムダ式は、簡単にいうと「その場で作れる小さな関数」です。普通の関数はdefで作りますが、ラムダ式はlambdaというキーワードを使って1行で書けます。
例えば、数字を2倍にする関数を作る場合、通常はこう書きます。
def double(x):
return x * 2
ラムダ式を使えば、次のように短く書けます。
lambda x: x * 2
この「lambda x: x * 2」は、「xを受け取ってx×2を返す」という関数です。とてもシンプルですね。
2. filter関数とは?
filter関数は、「条件に合うデータだけを残す」ための関数です。イメージとしては「ふるいにかけて不要なデータを取り除く」感じです。
構文は以下のようになります。
filter(条件を判定する関数, 対象のデータ)
このとき、条件を判定する関数にはラムダ式を使うと非常に便利です。
3. ラムダ式とfilter関数を組み合わせた例
それでは具体例を見てみましょう。例えば、あるクラスのテストの点数リストから、60点以上の合格者だけを抽出したいとします。
scores = [55, 70, 42, 90, 68, 100, 35]
# filter関数とラムダ式で合格者を抽出
passed_scores = list(filter(lambda x: x >= 60, scores))
print(passed_scores)
実行結果は以下の通りです。
[70, 90, 68, 100]
このコードでは、「lambda x: x >= 60」という条件を使って、60点以上だけを残しています。filter関数は「条件に合うものだけを返す」ので、このように合格者だけのリストができあがります。
4. 別の例:偶数だけを抽出
次は、数のリストから偶数だけを取り出す例です。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 偶数だけ抽出
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
実行結果は以下の通りです。
[2, 4, 6, 8, 10]
偶数かどうかは「x % 2 == 0」で判定します。これは「xを2で割った余りが0なら偶数」という意味です。
5. filter関数とリスト内包表記の違い
Pythonでは、filter関数を使わなくてもリスト内包表記という方法で同じことができます。
例えば、先ほどの偶数抽出は次のようにも書けます。
even_numbers = [x for x in numbers if x % 2 == 0]
filter関数とラムダ式の組み合わせは、特にシンプルな条件で使うとコードが短くなって読みやすくなります。
6. まとめではないけれど注意点
filter関数を使うときの注意点は、結果が「イテレータ」という形式で返ってくることです。これは、そのままではリストのように中身が見えない形式です。そのため、上の例ではlist()で囲んでリストに変換しています。
また、ラムダ式は短く書ける反面、処理が長く複雑になる場合は通常のdef関数を使ったほうが読みやすくなります。