ホーム テクノロジー 開発 Python 三項演算子の使用方法

Python 三項演算子の使用方法


このガイドでは、Python で三項演算子の使用方法を説明します。構文を学習し、いくつかの例をコーディングして、その仕組みを理解します。

まず、if-else 条件文がどのように機能するかを確認し、次に三項演算子を使用して同等の式を作成する方法を学びます。

次に、いくつかの例をコーディングし、Python タプルと辞書を使用して Python の三項演算子の動作をエミュレートする方法を学びます。最後に、三項演算子の使用を推奨するいくつかのユースケースを確認します。

さぁ、始めよう!

Python の If-Else ステートメント: レビュー

Python REPL を開始するか、 のオンライン Python エディターでコーディングを行うことができます。

Python の if-else ステートメントの一般的な構文は次のとおりです。

 if condition:
    # do this
else:
    # do this

上記のスニペットでは、 conditionチェックされる条件を示します。条件がTrueと評価されると、 if ブロックがトリガーされます。条件がFalseと評価された場合、else ブロック内のステートメントが実行されます。

以下は、 energyの値がゼロ以下かどうかに応じて、 game_over変数にブール値が割り当てられる例です。

  • energy <= 0の場合、 game_overTrueです。
  • それ以外の場合、 game_overは False です。

次のコード スニペットは、if-else 条件文を使用してこれを行う方法を示しています。

 energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

この例では、 energyは -1 で、0 より小さいため、 game_overは True になります。

Python 三項演算子: 構文と例

Python-三項演算子-1
Python-三項演算子-1

Python には、C や C++ などの言語の三項条件演算子とよく似た動作をする三項演算子があります。これを使用するための一般的な構文は次のとおりです。

 expression1 if condition else expression2

上記の構文を解析してみましょう。

  • condition : チェックする条件。
  • expression1 : 条件が True かどうかを評価する式。
  • expression2 : 条件が False かどうかを評価する式。

ここで、コードの if-else バージョンから、 expression1expression2 、およびconditionがどのようなものであるべきかを特定します。

三項演算子 ex1
三項演算子 ex1

これらをすべてまとめると、Python の三項演算子を使用すると次のようになります。

 game_over = True if energy <= 0 else False
print(game_over)
# True

別の例をコーディングしてみましょう。あなたが書店を経営しており、過去 1 年間に読者があなたの店を訪れた頻度に応じて、読者に購入の割引を提供するとします。

numVisits訪問数を表すものとします。

  • numVisits > 7の場合、割引率、 discount_percは 20 です。
  • それ以外の場合、 discount_perc 5 です。

三項演算子を使用して、 discount_perc変数に値を割り当てます。

 numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

次に、Python タプルと辞書を使用して三項演算子をエミュレートする方法を学びます。

Python タプルを使用した三項演算子のエミュレーション

Python のすべてのイテラブルと同様に、タプルはゼロ インデックスに従います。したがって、タプルに 2 つの要素がある場合、 tuple_name[0]タプルの最初の要素を示し、 tuple_name[1]タプルの 2 番目の要素を示します。

Python の基本的なデータ型は、整数、浮動小数点数、文字列、およびブール値です。 Python は、特定のデータ型を別のデータ型の同等の表現で表現できる型キャストをサポートしています。

Python REPL を開始し、次の例を実行します。整数をブール値に変換しようとすると、次のことに気づくでしょう。

  • bool(0) Falseです。
  • bool(<any non-zero integer>) Trueを返します。
 >>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

同様に、ブール値を整数にキャストすると、次のようになります。

 >>> int(True)
1
>>> int(False)
0

型のキャストとインデックス付けをまとめると、次のようになります。

  • タプル内のインデックス 0 の要素: condition Falseの場合に使用される値。
  • タプル内のインデックス 1 の要素: condition Trueの場合に使用される値。

上記を使用すると、次のようになります。

 >>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

ここで、 numVisits 10 であるため、条件numVisits > 7Trueですint(True)が 1 であるため、 discount_percの値は 20 (インデックス 1 の要素) になります。

Python 辞書を使用した三項演算子のエミュレーション

辞書のキーとしてTrueFalseを設定できます。またexpression1expression2それぞれキーTrueFalseに対応する値として設定できます。

 some_dict = {True: expression1,
             False: expression2
            }

次に何をしますか?ここで、 some_dict[condition]を使用すると、 condition Trueの場合、 Trueキーに対応するexpression1が評価されます。そして、 expression2 condition Falseの場合に評価されます。

discount_percの例を (もう一度) コーディングしましょう。ただし、今回は Python 辞書を使用します。

 >>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

ここで、 numVisits = 10は 7 より大きいです。したがって、条件numVisits > 7Trueです。したがって、 discount_dict[numVisits > 7]値 20 であるdiscount_dict[True]と評価されます。

常に Python 三項演算子を使用する必要がありますか?

常に Python 三項演算子を使用する必要がありますか
常に Python 三項演算子を使用する必要がありますか

ここまでは、三項演算子の使用方法を学習しました。しかし、常に三項演算子を使用する必要があるのでしょうか?まあ、三項演算子がすべてのユースケースにとって最良の選択であるとは限りません。このセクションでは、if-else ステートメントではなく三項演算子を使用する必要がある場合について詳しく説明します。また、三項演算子の代わりに if-else ステートメントの使用を検討する必要がある場合についても説明します。

If-Else ブロックよりも簡潔

前述したように、Python では、三項演算子の式は if-else ステートメントよりも簡潔です。したがって、これを使用して条件をチェックし、オンザフライで条件付きで式を評価できます。

次の例では、 numsランダムに生成された 100 個の整数のリストです。 100 個の数値のそれぞれについて、奇数か偶数かをチェックします。そして、この評価は f 文字列内でインラインで行われます。

 import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
 # sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

三項演算子には Else 節が必要です

if-else 条件文を使用する場合、else 句はオプションです。例を挙げてみましょう。 energyゼロ以下の値に低下すると、 game_over変数はTrueに設定されます。

ただし、 energyがゼロより大きい場合、 game_over変数は初期化されません。したがって、 game_over変数にアクセスしようとするとエラーが発生します。

 energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
 Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

これを修正する 1 つの方法は、最初にgame_over Falseに設定し、エネルギー レベルが 0 以下の場合にTrueに更新することです。

 energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

ただし、上記と同等の Python 三項演算子を使用する場合、else 句はオプションではありません。三項演算子では、 conditionFalseの場合に式を評価する必要があります。

 game_over = True if energy <= 0 else False

else 部分を削除して上記のコードをgame_over = True if energy <= 0に変更すると、次のような構文エラーが発生します。

 File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

複数の条件を確認するには、If-Else ステートメントを使用します

例を考えてみましょう。コーディング面接の一連の質問のすべての質問には、関連付けられた難易度スコアがあります。このスコアに応じて、特定の質問に 3 つの難易度 (簡単、中、または難しい) のいずれかが割り当てられます。次のものがあると仮定します。

スコア難易度
10未満簡単
10~20の間中くらい
20を超える難しい

難易度スコアを考慮すると、次のように Python 三項演算子を使用して難易度レベルを取得できます。

 score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

上記のコード ブロックの三項演算子の式は次の形式です。

 expression1 if condition1 else expression2 if condition2 else expression3

簡潔ではありますが、読んで理解するのは少し難しいです。次の図は、この場合の制御フローがどのように発生するかを示しています。

三項演算子の例
三項演算子の例

次のコード スニペットは、if-else ステートメントを使用した同等の実装を示しています。ご覧のとおり、制御フローは非常に理解しやすくなり、コードも読みやすくなりました。

 if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

したがって、複数の条件がある場合は、三項演算子の代わりに if-else ブロックを使用する必要があります。これにより、コードが読みやすく、理解しやすくなります。

また、条件が true か false に応じて複数のステートメントを実行する必要がある場合は、if-else ステートメントの使用を検討する必要があります。

結論

このチュートリアルで学んだ内容を要約します。

  • Python では、三項演算子は次の構文で使用できます: expression1 if condition else expression2
  • Python のタプルと辞書を使用して、三項演算子の動作をエミュレートできます。
  • 三項演算子は if-else ブロックのより簡潔な代替手段になりますが、コードが読みやすいことを確認する必要があります。コードの読みやすさを向上させるために、特に複数の条件を連鎖させる必要がある場合には、三項演算子の代わりに if-else ステートメントを使用できます。

次に、Python の等価演算子と不等価演算子に関するチュートリアルを確認してください。

「 Python 三項演算子の使用方法」についてわかりやすく解説!絶対に観るべきベスト2動画

【Python】超便利!条件分岐if/elseを一行で書く「三項演算子」
Python入門 三項演算子