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) です。


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて