Pythonの三項演算子の使い方|if文を一行で記述できる条件式
- 公開日:2018/11/17
- 更新日:2018/11/17
- 投稿者:n bit
Pythonの三項演算子の使い方について解説。Pythonでif文の条件式を記述するときに1行で記述する方法があります。同じく1行でコードを記述する内包表記やlambda式と相性の良いif文の条件式の記述方法です。
この記事は約 分で読めます。(文字)
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行が構成されています。このように分けて考えると記述内容が理解しやすいでしょう。
内包表記に関しては下記のページでも詳しく解説しています。
Pythonのリスト内包表記の基本と使い方
Pythonでリストを生成するときに内包表記を利用するとコード内容によっては簡潔に記述することができ無駄な呼び出し処理も抑えられるので実行処理速度を上げることができます。今回はそのリスト内包表記の基本と使い方についての解説です。
Pythonで作業メモリを節約できるジェネレータ内包表記の使い方
Pythonで作業メモリを節約しプログラムの実行処理速度を高速化させるジェネレータ内包表記について解説。ジェネレータ関数に似ていますが関数ではなく式のためより簡潔なコードで記述でき、膨大な数の演算でも処理できます。
三項演算子と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関数は『複数の要素を持つ配列オブジェクト内のすべての要素に引数で渡す関数の処理を適用してイテレータを返す関数』でしたね。
詳しくは下記のページをご覧ください。
Pythonのmap関数の使い方 配列内の全ての要素に関数処理を適用する
Pythonのmap関数の基本や使い方について解説。listやtuple、dict等の配列に関数処理を実行したい場合がありますよね。そのような場合に1行の記述で一括処理できてしまう便利な組み込み関数が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に関しては下記のページで詳しく解説しています。
Pythonのlambda(ラムダ式:無名関数)の使い方
Pythonで関数名を持たない無名関数をlambda(ラムダ式)で記述する方法を解説。関数名の指定が必要ないためちょっとした実行処理であれば1行で簡素に記述することができ、関数の引数に簡単な独自関数を渡す場合などに利用します。
今日のdot
今回はPythonの三項演算子の使い方について学習しました。三項演算子を使った条件式を記述することでif文を1行で記述することができます。
三項演算子と内包表記、またはlambda式を組み合わせても同じような結果を得ることができます。しかし基本的に推奨されているのは内包表記やジェネレータ式になりますので、どちらを利用しても問題ない場合はジェネレータ内包表記の方を選択するようにしておきましょう。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。