Python の lambda 式と if

Python の lambda 式での条件分岐

lambda 式は、基本的に関数をとても簡潔に書けます。

ところが、lambda 式では複数行に渡るステートメントを許可していません。 そのため、「複雑な条件分岐」を行うような場合には、lambda 式ではなく def を用いた関数を使います。

簡単な条件分岐の場合には、三項演算子 (ternary operator) と lambda 式を組み合わせます

ここでは、lambda 式に if などの条件分岐を組み合わせる例を紹介します。

Python の lambda 式と三項演算子 (if else)

Python の三項演算子は次の形式で書けます。三項演算子は「条件式」(condition expression) とも言い、ひとつの値を表します。

(条件がTrueの時の値) if (条件) else (条件がFalseの時の値)

次の例では、ある得点 (scores) を保持するリスト scores があり、 その得点が 80点以上の場合に PASS、80点未満の時に FAIL という文字を返しています。

scores = [52, 85, 90, 40, 80]
results = map(lambda x: 'PASS' if x >= 80 else "FAIL", scores)
print(list(results))  
# ['FAIL', 'PASS', 'PASS', 'FAIL', 'PASS']

Python の lambda 式と or 演算子

入力となるコレクションの値で、直ちに真偽が判定できる場合、ショートハンド (簡略形) の or 演算子が使えます。

or 演算子では、次の形式で条件分岐を行います。

(True と評価される値) or (False の場合の値)

次の例では、果物 (fruits) のリストが与えられています。そのうち空文字の箇所を、 (n/a) という文字に置き換えています。

fruits = ['Apple', '', 'Orange']
results = map(lambda x: x or "(n/a)", fruits)
print(list(results))
# ['Apple', '(n/a)', 'Orange']

空の文字列は False、それ以外は True と評価されます。そのため 'Apple' という文字は True なので、 という文字そのものが返り、 空文字 '' は False なので or の後に指定した "(n/a)" という文字が返っています。

これは if は使っていませんが、意味的に条件分岐なので参考までに紹介しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門