Pythonの三項演算子の使い方|if文を一行で記述できる条件式のイメージ画像

Pythonの三項演算子の使い方|if文を一行で記述できる条件式

  • 公開日:2018/11/17
  • 更新日:2018/11/17
  • 投稿者:n bit

Python三項演算子使い方について解説。Pythonでif文の条件式を記述するときに1行で記述する方法があります。同じく1行でコードを記述する内包表記やlambda式と相性の良いif文の条件式の記述方法です。

  • Python

この記事は約 分で読めます。(文字)

Pythonでif文を一行で記述できる条件式

Pythonでは内包表記やlambdaのようにコードの記述を1行で行う方法が数多く用意されていました。その以外にもif文を1行で書くための方法も用意されており『条件式』や、しばしば『三項演算子』とも呼ばれています。

例えば『入力された値が偶数か奇数かを見分ける』ような条件式の場合でも下記のような簡素なコードになります。

num = 3


x = '偶数' if num % 2 == 0 else '奇数'

では『三項演算子』について詳しく学習していきましょう。

三項演算子の使い方

三項演算子の基本的な記述方法は最初に『条件式がTrueの場合の値』を記述し、その後に『if 条件式』、『else 条件式がFalseのときの値』と続きます。

  • 条件式がTrueのときの値 if条件式 else条件式がFalseのときの値

では実際にコードで記述してみましょう。冒頭で紹介した『入力された数値が偶数か奇数かを見分ける』条件式を三項演算子を使って記述します。

通常のif文で記述した場合は下記のコードです。

num = 3


if num % 2 == 0:
x = '偶数'
else:
x = '奇数'

print(x)

出力結果

奇数

入力された数値が『3』でしたので奇数と判定されました。

こちらを三項演算子を使って置き換えてみましょう。

num = 3


x = '偶数' if num % 2 == 0 else '奇数'

print(x)

出力結果

奇数

三項演算子を使った場合でも入力された数値が『3』であれば奇数と判定されました。

4行で記述していたif文が三項演算子を使うと1行になりますのでとても簡素にすることができますね。

少しだけ内容補足しておきましょう。偶数か奇数かを判定する場合には余りを求める演算子『%』を利用し『2』で『割った余りが0』かどうかの判定です。

num % 2 == 0
  • %  :  a % b  :  剰余(aをbで除算した余り)

後は

  • 余りが『0』であれば条件式がTrueのときの値:偶数
  • 余りが『0以外』であれば条件式がFalseのときの値:奇数

を設定しています。

三項演算子と内包表記を組み合わせた記述方法

三項演算子は内包表記などと組み合わせた利用が多いでしょう。内包表記と組み合わせて利用することで単一要素だけではなく配列の要素なども扱えるようになります。

通常のif文で記述した場合は下記のコードです。

nums = [2, 5, 8, 9, 11]


for num in nums:
if num % 2 == 0:
x = '偶数'
else:
x = '奇数'

print(x)

出力結果

偶数

奇数
偶数
奇数
奇数

こちらを内包表記を使って置き換えると下記のようになります。

nums = [2, 5, 8, 9, 11]


x = ('偶数' if num % 2 == 0 else '奇数' for num in nums)

for result in x:
print(result)

出力結果

偶数

奇数
偶数
奇数
奇数

問題なく同じ出力結果が得られていますね。

内包表記の記述と三項演算子の記述が組み合わさったところは少し理解しにくいと思いますので分解して考えてみましょう。

通常の内包表記の記述方法に

x = (num for num in nums)

三項演算子の記述方法が

x = '偶数' if num % 2 == 0 else '奇数'

組み合わせることで

x = ('偶数' if num % 2 == 0 else '奇数' for num in nums)

の1行が構成されています。このように分けて考えると記述内容が理解しやすいでしょう。

内包表記に関しては下記のページでも詳しく解説しています。

三項演算子とlambdaを組み合わせた記述方法

三項演算子とlambdaを組み合わせることでも同じようなことができます。通常のif文で記述した場合は先ほどと同じコードです。

nums = [2, 5, 8, 9, 11]


for num in nums:
if num % 2 == 0:
x = '偶数'
else:
x = '奇数'

print(x)

出力結果

偶数

奇数
偶数
奇数
奇数

lambda式に置き換える場合はmap関数と合わせて利用します。map関数は『複数の要素を持つ配列オブジェクト内のすべての要素に引数で渡す関数の処理を適用してイテレータを返す関数』でしたね。

詳しくは下記のページをご覧ください。

nums = [2, 5, 8, 9, 11]


x = map(lambda num:'偶数' if num % 2 == 0 else '奇数', nums)

for result in x:
print(result)

出力結果

偶数

奇数
偶数
奇数
奇数

こちらでも全く同じ出力結果を得ることができました。

lambdaと三項演算子を組み合わせた1行を分解してしていきましょう。

map関数とlambda式を組み合わせることで配列内の要素を1つずつ取得し処理を行います。

x = map(lambda num:実行処理, nums)

実行処理部分に三項演算子の記述方法が

x = '偶数' if num % 2 == 0 else '奇数'

組み合わさって

x = map(lambda num:'偶数' if num % 2 == 0 else '奇数', nums)

の1行が構成されています。わからなくなった場合はこのように分解して考えると良いでしょう。

lambdaに関しては下記のページで詳しく解説しています。

今日のdot

今回はPython三項演算子使い方について学習しました。三項演算子を使った条件式を記述することでif文を1行で記述することができます。

三項演算子と内包表記、またはlambda式を組み合わせても同じような結果を得ることができます。しかし基本的に推奨されているのは内包表記やジェネレータ式になりますので、どちらを利用しても問題ない場合はジェネレータ内包表記の方を選択するようにしておきましょう。