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 は使っていませんが、意味的に条件分岐なので参考までに紹介しました。