Python の三項演算子 – 何? どうやって?なぜ?

Python の三項演算子 – 何? どうやって?なぜ?

プログラミングの世界では、コードを簡素化できることは、コードの読みやすさと効率の両方にとって貴重です。Python でこれを行うために自由に使えるツールの 1 つは、三項演算子です。

Python の三項演算子 (または条件式) を使用すると、指定された条件が true か false に基づいてステートメントを 1 行のコードで評価できます。複数行の if-else ステートメントを効果的に置き換えることができ、コードがよりコンパクトになります。

Python三項演算子の可能性を探ると、これらがプログラムの最適化に非常に役立つことがわかります。意思決定ロジックを簡素化するためでも、コードを合理化するためでも、Python三項演算子を効果的に使用すると、コードがはるかに読みやすく、理解しやすくなります。

それでは、内部を覗いて、その内容を見てみましょう。

Python の三項演算子 – 何?  どうやって? なぜ?

目次

Python 三項演算子とは何ですか?

Python の三項演算子は、条件が true か false に基づいてステートメントを評価する簡潔な方法を提供し、コードをコンパクトで読みやすくします。条件式または条件演算子と呼ぶ人もいます。

基本的な構文

三項演算子はPython 2.5で導入され、3 つのオペランドで構成される単純な構造を持っています。

#demonstrate python ternary operator syntax

result = value_if_true if condition else value_if_false

この構文は、次の 3 つの主要な部分で構成されます。

  1. 条件: これは、true または false として評価されるブール式です。

  2. value_if_true : ブール式が true の場合に返される値。

  3. value_if_false : ブール式が false の場合に返される値。

一般的な使用例

三項演算子または条件式は、コード内の短い if-else ステートメントを簡素化するためによく使用されます。以下に、Python 三項演算子を適用する方法を示すいくつかの例を示します。

例 1: 条件に基づいて値を割り当てる

 age = 25
 
category = "adult" if age >= 18 else "minor"

この例では、Python 三項演算子は、年齢が 18 歳以上の場合は変数カテゴリに値「Adult 」を割り当て、それ以外の場合は「 minor」を割り当てます。

Python 三項演算子の代わりに if-else ステートメントを使用することを選択したと仮定すると、次のようになります。

age = 25

if age > 18:
   category = "Adult"
else:
   category = "Minor"

この場合、三項演算子を使用すると、コードがよりコンパクトになり、読みやすくなることがわかります。

例 2: 2 つの数値のうち小さい方を選択する

a = 10
b = 15

smallest = a if a < b else b

ここで、三項条件演算子は、a と b の間の小さい方の値を返すことにより、2 つの数値のうちの最小値を決定するのに役立ちます。

例 3: 2 つの変数の最小値を割り当てる:

num1 = 10
num2 = 20

min_num = num1 if num1 < num2 else num2
print(min_num)

三項演算子が条件を評価して小さい方の値を返すため、この例の出力は 10 になります。

例 4: 数値が偶数か奇数かを調べる:

num = 5

result = "Even" if num % 2 == 0 else "Odd" 
print(result)

この例の出力は、条件がFalseと評価され、三項演算子が適切な結果を返すため、 Oddになります。

これらの例は、Python 三項演算子を使用してコードをより簡潔で読みやすくする方法を示しています。基本的な構文を使用し、一般的な使用例を理解することで、三項演算子を Python コードに効果的に組み込むことができます。

より実用的なアプリケーションでは、ループと組み合わせて使用​​して、データのチェック、評価、または操作を実行できます。

より効率的なデータ処理については、補間を使用して Python で欠損データを処理する方法に関するこのビデオをご覧ください。

Python 三項演算子の使用方法

通常の三項演算子の if-else 構文は、Python 三項演算子を実装できる数多くの方法の 1 つにすぎません。Python 辞書、タプル、リストなどの一般的なデータ構造を使用して実装することもできます。

これらの方法のいくつかを見てみましょう。

辞書マッピング

辞書マッピングを使用して Python 三項演算子をエミュレートし、さまざまな条件の結果を保存できます。これは、有限セットの条件とそれに対応する結果がある場合に便利です。

次に、辞書マッピングを使用して数値が偶数か奇数かを確認する例を示します。

#Implement python ternary operator with dictionary mapping

number = 7
result = {True: "Even", False: "Odd"}

is_even = result[number % 2 == 0]

上記のプログラムは、括弧内のブール式が False と評価されるため、 「 Odd 」を返します

タプルの使用

Python タプルは、三項演算子の実装に使用できる、順序付けされた不変のデータ構造です。基本的に、タプルの三項演算子の構文は次のとおりです。

(condition_is_false, condition_is_true)[condition]

条件はTrueまたはFalse のいずれかに評価され、Python ではそれぞれ整数1oに等しくなります。

したがって、タプルは、結果のインデックスに一致する要素を返します。たとえば、条件がTrue ( 1 )と評価された場合、コードはcondition_is trueを返します。

それ以外の場合、 False ( 0)と評価され、タプルはcondition_is_falseを返します。以下に例を示します。

#Implement ternary operator with tuples

c = False
result = ('a', 'b')[c]

条件が False と評価されるため、タプルは値 ' a ' を変数resultに格納しますほとんどの開発者は、この形式を三項演算子に使用することを好みません。少し混乱する可能性があり、目的に反するためです。

ラムダ関数

Lambda 関数は、三項演算子の代わりに使用できる匿名の単一行関数です。これらを使用すると、単純な計算を実行し、指定された条件に基づいて結果を返すことができます。

以下は、ラムダ関数を使用して 2 つの数値の最大値を見つける例です。

#implement python ternary operator with lambda functions

a, b = 10, 20
max_value = (lambda: a, lambda: b)[a < b]()

条件がTrueと評価された場合、ラムダ関数は を返します。それ以外の場合は、bを返します。

入れ子になった三項演算子とは何ですか?

ネストされた三項演算子は、2 つ以上のブール式を含む条件式です。これを作成するには、2 つ以上のブール条件を連結して複数の条件をチェックします。

これらのタイプの三項演算子を使用して、「elif」ステートメントとネストされた if-else ブロックをモデル化できます。

ネストされた Python 三項演算子の例を見てみましょう。

age = 21

#Normal elif statement
if age< 21:
   print('Child')
elif age< 25:
   print ('young adult')
else:
   print('Adult')

#elif statement as a ternary operator
print('Child') if age < 18 else print('Young adult') if age <21 else print ('Old Person')

#Output: 'Young Adult'

ネストされた if-else ステートメントを模倣したい場合は、Python 三項演算子に括弧を追加できます。ただし、三項演算子が非常に長くなり読めなくなる可能性があるため、これは良い習慣ではありません。

このような場合は、コード内で標準の if-else ブロックを使用することをお勧めします。

Python 三項演算子の利点は何ですか?

コード内で Python 三項演算子を使用すると、多くの利点が得られます。これらの利点には次のようなものがあります。

コードの読みやすさと簡潔さ

Python 三項演算子を使用するとコードがより簡潔になり、条件式を 1 行で記述できるようになります。

これは、単純で単純な条件を扱う場合に特に役立ちます。複数行の if-else ステートメントの必要性が減るため、コードがより読みやすく、理解しやすくなります。

パフォーマンスに関する考慮事項

三項演算子を使用するとコードがよりコンパクトになる可能性がありますが、パフォーマンスへの影響は通常は最小限です。Python のインタープリターは、コードの実行を最適化するように設計されています。つまり、三項演算子と if-else ステートメントは通常、同様のパフォーマンス特性を持っています。

Python コードを作成するときは、パフォーマンスが重要なアプリケーションを使用している場合を除き、パフォーマンスよりも読みやすさと保守性を優先してください。

状況が異なれば、アプローチも異なることを忘れないでください。三項演算子の使用が有益な場合もありますが、従来の if-else ステートメントに固執する方が適切な場合もあります。

Python 三項演算子の欠点

三項演算子は、コードを簡素化し、コンパクトにするのに最適です。ただし、それらの使用にはいくつかの欠点がある可能性があります。

これらの欠点の一部を次に示します。

ネストされた三項演算子は複雑になる可能性がある

場合によっては、特に複雑な条件や入れ子の条件を使用する場合、三項演算子によってコードが読みにくくなることがあります。このような状況では、コードの明瞭さを維持するには、従来の if-else ステートメントを組み込む方が適切な場合があります。

これは、ネストされた if-else ステートメントを三項演算子に置き換えようとしている場合に特に当てはまります。きれいなコードが得られることはほとんどありません。

各オペランドは式です

Python 三項演算子のすべてのオペランドまたは戻り値は、ステートメントではなく式です。三項演算子の構文内で代入ステートメントを使用しようとすると、構文エラーが発生します。

以下のコードでこの例を確認できます。

'Adult' if True else x = 44

以下に示すように、構文エラーが発生します。このような場合は、条件演算子の代わりに if-else ブロックを使用する必要があります。

Python の三項演算子 – 何?  どうやって? なぜ?

ベストプラクティスとヒント

Python で三項演算子を使用する場合、クリーンで効率的で読みやすいコードを作成するのに役立つベスト プラクティスとヒントがいくつかあります。

まず、条件式が短く簡潔であることを確認してください。条件が長く複雑であると、三項演算子の背後にあるロジックを理解することが難しくなる場合があります。

複雑な条件に直面している場合は、代わりに通常の if-else ステートメントを使用した方がよい場合があります。

#demonstrate nested ternary operator
# Good example 
result = "positive" if number >= 0 else "negative" 


# Bad example 
result = (a + b if (x > 10 and y > 20) else c + d) if (z > 30 and p > 40) else ...

次に、コードが混乱して読みにくくなる可能性があるため、複数の三項演算子をネストしないでください。複雑な条件と同様に、読みやすくするために if-else ステートメントの使用を検討してください。

# Good example 

x = A if condition1 else B if condition2 else C 

# Bad example 
x = A if condition1 else (B if condition2 else (C if condition3 else ...)) 

最後に、三項演算子の適切な使用例に注意してください。条件と結果の両方が理解しやすい、単純な 1 行の割り当てに最適です。

コードにより複雑なロジック、ループ、または複数の代入が含まれる場合は、従来の if-else ステートメントに固執することをお勧めします。

Python 三項演算子に関する FAQ

三項演算子に関して新人プログラマーからよく聞かれる質問をいくつか紹介します。

Python の return ステートメントで三項演算子を使用するにはどうすればよいですか?

関数の return ステートメントで Python 三項演算子を使用できます。必要なのは、これを return ステートメントに追加することだけです。

以下に例を示します。

#program to check cheese age

def is_legal(age):
  return 'legal' if age > 18 else 'Not legal'

三項演算子は Python の if-else ステートメントより高速ですか?

いいえ、どちらも同様のパフォーマンス特性を持っています。三項演算子と if-else ステートメントの時間計算量は両方とも O(1) です。


Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。