注目キーワード
  1. Python
  2. コンペ

Pythonのlambdaで条件分岐する方法|then相当の書き方と複数条件パターンを解説

  • 2026年6月21日
  • Python
  • 1回
  • 0件

Pythonのlambdaで条件分岐は書けるのか?

Pythonのlambda式は、1行で関数を定義できる構文です。
ただし、通常のif文のように複数行の処理を書くことはできません。

「lambdaの中で条件によって返す値を変えたい」「then相当の処理をlambdaで書けるか」といった疑問を持った場合、三項演算子(条件式) を使うのが基本的なアプローチになります。

この記事では、lambda式の中で条件分岐を書く方法と、複数条件のパターン、よくあるミスを解説します。

if文の基礎や条件分岐の書き方については、「Pythonのif true 使い方完全ガイド」で詳しく解説しています。

lambda式と三項演算子(基本の形)

Pythonのlambda式の中で条件分岐を実現するには、三項演算子(条件式)を使います。

三項演算子の書き方は次のとおりです。

値A if 条件 else 値B

条件が真のとき値Aが返り、偽のとき値Bが返ります。これが、他の言語でいう「then」に相当する役割を担います。

基本例:数値が正かどうかを判定する

check_positive = lambda x: "正" if x > 0 else "ゼロ以下"

print(check_positive(5))
print(check_positive(-3))
正
ゼロ以下

lambda x: の後ろに三項演算子を置くだけで、条件によって返す値を切り替えられます。

pandasのapply・mapとの組み合わせ

lambda式は、pandasのapplymapと組み合わせて使うことが多いパターンです。

列の値に応じてラベルを付ける

import pandas as pd

df = pd.DataFrame({"score": [80, 45, 65, 90]})

df["grade"] = df["score"].apply(lambda x: "合格" if x >= 60 else "不合格")

print(df)
   score grade
0     80    合格
1     45   不合格
2     65    合格
3     90    合格

条件ごとにラベルを付けたい場面では、この書き方が実用的です。

複数条件を書く方法

三項演算子は入れ子にすることで、複数の条件分岐を表現できます。ただし、入れ子が深くなると読みにくくなるため注意が必要です。

三項演算子の入れ子(2段階の分岐)

classify = lambda x: "高" if x >= 80 else ("中" if x >= 50 else "低")

print(classify(90))
print(classify(65))
print(classify(30))
高
中
低

elseの後ろにさらに三項演算子を続けることで、3値以上の分岐を1行で書けます。

andとorを使った複数条件

複数の条件を同時に評価したい場合は、andorを使えます。

check = lambda x, y: "両方正" if x > 0 and y > 0 else "どちらかが0以下"

print(check(3, 5))
print(check(3, -1))
両方正
どちらかが0以下

AWS Lambdaでlambda式を使う場面

「AWSのLambda(サーバーレス関数)でもPythonのlambda式を使う場面があります。

AWS Lambdaの関数定義自体はPythonのdefを使うのが基本ですが、Pythonコードの内部でlambda式を使うことはもちろん可能です。

例として、取得したデータを加工する際にlambda式と条件分岐を組み合わせるパターンを示します。

def lambda_handler(event, context):
    records = [
        {"name": "Alice", "score": 85},
        {"name": "Bob", "score": 40},
        {"name": "Carol", "score": 70},
    ]

    # lambda式でスコアに応じてラベルを付ける
    label = lambda score: "pass" if score >= 60 else "fail"

    result = [
        {"name": r["name"], "result": label(r["score"])}
        for r in records
    ]

    return result
[
  {"name": "Alice", "result": "pass"},
  {"name": "Bob", "result": "fail"},
  {"name": "Carol", "result": "pass"}
]

AWS Lambdaのハンドラ関数(lambda_handler)と、Pythonのlambda式は名前が似ていますが、別の概念です。混同しないよう注意してください。

sortとの組み合わせ(key引数でよく使うパターン)

lambda式が条件分岐と一緒に使われるもう一つの場面が、sorted()sort()key引数です。

data = ["banana", "apple", "cherry", "fig"]

# 文字列の長さで昇順ソート
sorted_data = sorted(data, key=lambda x: len(x))

print(sorted_data)
['fig', 'apple', 'banana', 'cherry']

条件によってソートキーを変えたい場合は、三項演算子を組み合わせます。

# 先頭が"b"のものを先に並べる(それ以外は後ろ)
sorted_data = sorted(data, key=lambda x: (0 if x.startswith("b") else 1, x))

print(sorted_data)
['banana', 'apple', 'cherry', 'fig']

よくあるミスと注意点

if文をlambda内にそのまま書こうとしてしまう

lambda式の中に通常のif文を書くことはできません。

# これはエラーになる
bad_lambda = lambda x: if x > 0: return "正" else: return "負"
SyntaxError: invalid syntax

条件分岐が必要なら、三項演算子を使うか、def文で通常の関数として定義してください。

入れ子が深すぎて読みにくくなる

# 読みにくい例(入れ子が深い)
classify = lambda x: "A" if x >= 90 else ("B" if x >= 80 else ("C" if x >= 70 else ("D" if x >= 60 else "F")))

このような場合は、def文で書き直した方が保守しやすくなります。

def classify(x):
    if x >= 90:
        return "A"
    elif x >= 80:
        return "B"
    elif x >= 70:
        return "C"
    elif x >= 60:
        return "D"
    else:
        return "F"

1行で収まる条件分岐はlambda式、3段階以上の分岐はdef文、という使い分けが読みやすさにつながります。

Noneが返ってくるケースへの対応

lambdaで外部データを加工するとき、値がNoneになる可能性がある場合はNoneチェックを入れましょう。

safe_upper = lambda x: x.upper() if x is not None else ""

print(safe_upper("hello"))
print(safe_upper(None))
HELLO

Noneチェックを省略すると、AttributeErrorが発生することがあります。

AI時代での補足

AIにlambda式を含むコードを生成させる機会は増えています。ただし、可読性を下げる入れ子構造のlambda式が出力されることもあります。「動くか」だけでなく「この条件分岐は適切か」を判断できると、AIの出力を正しく評価しやすくなります。

まとめ

  • Pythonのlambda式で条件分岐するには三項演算子値A if 条件 else 値B)を使う
  • 複数条件は三項演算子の入れ子やand/orで表現できる
  • 分岐が3段階以上になる場合は、def文に書き直す方が読みやすい
  • pandasのapplymapやsortのkey引数との組み合わせが実務でよく出る場面
  • Noneが返りうる値を扱う場合は、Noneチェックを入れることで予期しないエラーを防げる

lambda式の条件分岐をどこで使うか判断する力は、AIが出したコードを読み解く場面でも役立ちます。
Pythonの基礎的な条件分岐(if文)の理解を深めたい場合は、「Pythonのif true 使い方完全ガイド」もあわせて確認してください。

最新情報をチェックしよう!