プログラミングや動画編集の勉強ならCANIT (キャニット)

【初級編7】pythonの三項演算子を理解しよう

Python入門

本記事ではPythonの三項演算子について解説します。

三項演算子が使えるようになると、if文をたった1行で書くことが可能です。

ソースコードはなるべく短くするのが基本ですので、三項演算子はぜひ覚えておきたいところ。

本記事では、三項演算子とは何か、三項演算子の使い方、内包表記やラムダ式との組み合わせ方、について解説していきましょう。

Pythonの三項演算子とは?

三項演算子とは以下の構文でif文を記述する方法です。

{当てはまる場合の処理} if {条件式} else {当てはまらない場合の処理}

三項演算子を使うことで、ソースコードを短くすることが可能です。

非常に便利であり、実際の開発現場でも多く使われています。

ただし、あまり複雑なif文で三項演算子を使うと、かえってソースコードが読みにくくなる可能性もあります。

そのあたりについても以下で詳しく解説しましょう。

三項演算子の基本的な使い方

参考演算子の基本的な使い方を解説します。

  • if文を三項演算子で書く
  • elif文を三項演算子で書く

覚えることはそこまで多くないですが、少々書き方がややこしい面があります。

書き方さえ覚えてしまえば三項演算子は便利なので、ぜひ使いこなせるようになってください。

if文を三項演算子で書く

一般的なif文を三項演算子で書く方法です。

まずは普通の書き方をみていきましょう。

○標準入力例

25

○コード例

age = int(input("年齢を入力してください:"))

if age < 20:	
	print("あなたは20才未満ですね")
else:
	print("あなたは20才以上ですね")

○実行結果

年齢を標準入力し、入力結果によって表示を変更するプログラムです。

これがif文の基本的な書き方となります。

if文についてもう一度おさらいしたい場合は【入門編8】Pythonのif文を使って条件分岐をやってみようをお読み頂けると良いでしょう。

こちらを三項演算子で書く場合次のようになります。

○標準入力例

25

○コード例

age = int(input("年齢を入力してください:"))
print("あなたは20才未満ですね") if age < 20 else print("あなたは20才以上ですね") 

○実行結果

先程解説した、

{当てはまる場合の処理} if {条件式} else {当てはまらない場合の処理}

の構文通りになっていることを確認しましょう。

先程と全く同じ実行結果が得られます。

三項演算子はこのようにして書くのが基本となります。

elif文を三項演算子で書く

続いてelif文を三項演算子で書く方法をみていきましょう。

○標準入力例

25

○コード例

age = int(input("年齢を入力してください:"))

if age < 20:	
	print("あなたは20才未満ですね")
elif age < 30:
	print("あなたは20才以上30才未満ですね")
else:
	print("あなたは30才以上ですね")

○実行結果

通常通りelif文を書くとこうなりますよね。

これを三項演算子にすると、以下のようになります。

○標準入力例

25

○コード例

age = int(input("年齢を入力してください:"))
print("あなたは20才未満ですね") if age < 20 else print("あなたは20才以上30才未満ですね") if age < 30 else print("あなたは30才以上ですね")

○実行結果

elif文を三項演算子で書く場合、

{当てはまる場合の処理} if {条件式} else {elif文に当てはまる場合の処理} if {elif文の条件式} else {当てはまらない場合の処理}

このような書き方になります。

三項演算子でelif文を書く場合、elseを二回使って書くことになります

見て分かる通り、読みやすいコードとは言えません。

そのため、状況にもよりますが、elif文は三項演算子で書かない方が良いことも多いです。

三項演算子と内包表記を組み合わせる

続いて、三項演算子と内包表記を組み合わせる方法をみていきましょう。

内包表記と組み合わせることで、三項演算子の便利さが更にお分かり頂けるかと思います。

Pythonの内包表記とは

内包表記とは、for文を1行で書ける表記のことです。

for文について詳しく知りたい方は 【入門編9】Pythonのfor文、while文を使ってループ処理を書こうをお読み頂けると良いでしょう。

内包表記は、以下の構文に従って書きます。

[{式} for {変数名} in {配列名}]

コード例をみていきましょう。

○コード例

numbers = [i*2 for i in range(10)]
print(numbers)

○実行結果

上記のコードではnumbers変数に、内包表記で書いたfor文の実行結果を格納しています。

range(10)に入った0から9までの数値が、「i * 2」によってそれぞれ2倍になります。

number変数には数値が2倍になった配列が格納されています。

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

三項演算子と内包表記を組み合わせる書き方があります。

○コード例

numbers = [i*2 if i%2==0 else i for i in range(10)]
print(numbers)

○実行結果

上記のコードでは、for文によってまず0から9までの数値が変数iに格納されています。

その数値をif文によって1つずつ判定し、偶数(i%2==0)なら数値を2倍しています。

このように、三項演算子と内包表記を組み合わせると、for文とif文を一行で書けるのです。

三項演算子とラムダ式を組み合わせる

今度は三項演算子とラムダ式を組み合わせる方法を解説します。

ラムダ式について知らない方も多いと思うので、まずはそちらを解説しましょう。

Pythonのラムダ式とは

ラムダ式を用いることで、名前の無い関数(無名関数)を作成することが可能です。

関数名を特に付けたくない場合に、ラムダ式は便利でしょう。

関数そのものがよく分からない方は【入門編11】Pythonの関数を自分で作ってみようをお読み頂けると良いでしょう。

○コード例

def kansuu(number):
	return number*2
	
an = kansuu(3)
print(an)

○実行結果

上記のコードは、通常通り関数に名前を付けている例です。

こちらのコードをラムダ式で書いてみましょう。

○コード例

test_lambda = lambda number: number*2

an = test_lambda(3)
print(an)

○実行結果

ラムダ式は、

lambda {引数}: {関数内の処理}

という構文で書きます。

今回はtest_lambda(3)によって、関数を呼び出しています

numberに「3」が格納され、倍にした「6」を呼び出し先に返却します。

これがラムダ式の書き方です。

無名関数を使うことにより、ソースコードが読みやすくなることもあるのです。

三項演算子とラムダ式を組み合わせ方

三項演算子とラムダ式の組み合わせ方を紹介します。

○コード例

test_lambda = lambda number: "偶数です" if number%2==0 else "奇数です"

an = test_lambda(4)
print(an)

○実行結果

まず、test_lambda(4)によって、ラムダ式の関数が呼び出されます。

関数内では、三項演算子によってif文の処理が書かれています

numberが偶数だった場合に「偶数です」と表示し、奇数だった場合に「奇数です」と表示します。

「4」は偶数なので、「偶数です」という文字列が呼び出し先に返却されます。

このように、三項演算子とラムダ式を組み合わせると、ソースコードが一行で済む場合があります。

まとめ

本記事では三項演算子について解説しました。

三項演算子を使うことによって、if文を一行で書くことが可能です。

また、内包表記やラムダ式と組み合わせれば、更に便利に使うことができます

ただし、あまり複雑な処理を三項演算子で書くと、かえってソースコードが読みにくくなるので注意です。

三項演算子を使うのは、単純な処理を書く場合に留めましょう。

❤内容は役に立ちましたか?皆さまのご意見が励みになります☺
YesNo
手に職をつけてプログラマー転職

そろそろ本気で将来のことを考えなくちゃ……手に職をつけてプログラマーやエンジニアに転職したいなぁ。でも、プログラミングスクールってものすごくたくさんあるし、なんか敷居が高いのよね

これからプログラマーやエンジニアへの転身を目指すあなたに、どのスクールがもっとも適しているのかを紹介します。

Python入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました