Pythonの三項演算子を使うと、通常のif/elseを1行のコードに短縮できます。コードがすっきりして読みやすくなるため、Python初心者から中級者まで幅広く使われているテクニックです。
この記事では、Pythonにおける三項演算子の基本的な書き方・実用的なサンプルコード・使う際の注意点を、わかりやすく解説します。if/elseを使った通常の書き方と比較しながら学べるので、初めて三項演算子に触れる方にも安心の内容です。
また、三項演算子を使った方が良い場面・使わない方が良い場面も具体例で紹介しますので、ぜひ最後までご覧ください。
※本記事と同じ内容の解説動画も公開しています。動画で学びたい方はあわせてご活用ください。
条件分岐(if/else)の基本おさらい
三項演算子を理解するには、まず条件分岐の基礎を押さえておく必要があります。条件分岐とは、特定の条件に応じて異なる処理を実行する仕組みです。Pythonではおなじみのif文・else文を使って記述します。
if文の基本的な書き方や真偽値・条件式の使い方については、以下の記事で詳しく解説しています。まだ読んでいない方はこちらも合わせてご参照ください。
以降の解説は、条件分岐の基礎を理解している前提で進めます。
Python三項演算子とは?
三項演算子(ternary operator)とは、if/elseによる条件分岐を1行のコードでコンパクトに記述できる構文です。「条件演算子」と呼ばれることもあります。
通常のif/elseと同様に「条件が真(True)のときの値」と「条件が偽(False)のときの値」を返すことができ、コードの行数を削減してすっきりした記述を実現します。
Pythonの三項演算子は、JavaやC言語の条件 ? 真の値 : 偽の値とは書き方が異なり、英語の自然な語順に近い独自の文法を採用しています。
Python三項演算子の基本的な書き方(構文)
Pythonにおける三項演算子の基本構文は以下のとおりです。
値1 if 条件式 else 値2
- 条件式がTrueのとき → 値1 が返される
- 条件式がFalseのとき → 値2 が返される
通常のif/elseとの比較
実際に、通常のif/else文と三項演算子を比べてみましょう。
【通常のif/else文】
x = 10
if x > 0:
result = "Positive"
else:
result = "Non-positive"
print(result) # 出力: Positive
【三項演算子を使った場合】
x = 10
result = "Positive" if x > 0 else "Non-positive"
print(result) # 出力: Positive
どちらも結果は同じですが、三項演算子を使うと5行のコードが2行に短縮されています。変数への代入や関数の引数など、値を返す場面で特に威力を発揮します。
Python三項演算子の実用的なサンプルコード
ここからは、実際の開発でよく使われる三項演算子の活用例を紹介します。
① 2つの値を比較して最大値を取得する
2つの変数を比較して大きい方の値を取得する場合、三項演算子を使うと1行で簡潔に書けます。
a = 10
b = 15
max_value = a if a > b else b
print(max_value) # 出力: 15
なお、Pythonには組み込み関数max()もありますが、三項演算子を使うと追加の条件ロジックを柔軟に組み込めるメリットがあります。
② 真偽値(bool)による文字列の切り替え
フラグ変数(True/False)によってメッセージを切り替える場面でも三項演算子は見やすいです。
is_even = True
message = "Even" if is_even else "Odd"
print(message) # 出力: Even
③ 関数の引数に直接使う
関数に渡す引数の値を条件によって変えたいときも、三項演算子を使うとシンプルに書けます。
score = 75
print("合格" if score >= 60 else "不合格") # 出力: 合格
④ リスト内包表記と組み合わせる
Pythonのリスト内包表記と三項演算子を組み合わせると、さらに強力なコードが書けます。
numbers = [1, 2, 3, 4, 5, 6]
labels = ["偶数" if n % 2 == 0 else "奇数" for n in numbers]
print(labels)
# 出力: ['奇数', '偶数', '奇数', '偶数', '奇数', '偶数']
リストの各要素に対して条件分岐を行い、新しいリストを1行で生成できます。
三項演算子を使う際の注意点
三項演算子は非常に便利ですが、使い方を誤るとコードの可読性を下げてバグの原因にもなります。以下の注意点を押さえておきましょう。
注意点① 複雑な条件式には使わない
条件式が複雑になると、三項演算子を使っても読みにくいコードになってしまいます。
【読みにくい例】
# 条件式が複雑で一瞬考えてしまう
result = "Even" if (x > 0 and y < 10) else "Odd"
このようなケースは、通常のif/elseで書いた方がコードの意図が伝わりやすくなります。「1行で書けるかどうか」より「読み手に伝わるかどうか」を優先しましょう。
# 通常のif/elseの方が読みやすい
if x > 0 and y < 10:
result = "Even"
else:
result = "Odd"
注意点② 複数の操作を1行に詰め込まない
三項演算子は1つの値を返す式として使うのが基本です。複数の処理(副作用を伴う処理)を三項演算子の中に書くのは避けましょう。
# NG例:副作用のある処理を三項演算子に入れる(可読性が低い)
print("hello") if flag else do_something()
# OK例:値の選択のみに使う
value = "hello" if flag else "world"
print(value)
注意点③ ネスト(入れ子)は原則禁止
三項演算子を入れ子にすることは技術的には可能ですが、著しく可読性が下がるためチームでの開発では原則避けるべきです。
# NG例:三項演算子のネスト(読みにくい)
result = "A" if x > 10 else "B" if x > 5 else "C"
# OK例:if/elifで書き直す(読みやすい)
if x > 10:
result = "A"
elif x > 5:
result = "B"
else:
result = "C"
三項演算子を使うべき場面・使わない方が良い場面のまとめ
ここまでの内容を整理すると、以下のようになります。
| 場面 | 推奨 |
|---|---|
| シンプルな条件で値を1つ返すとき | ✅ 三項演算子を使う |
| 変数への代入や関数の引数として使うとき | ✅ 三項演算子を使う |
| リスト内包表記との組み合わせ | ✅ 三項演算子を使う |
| 条件式が複雑なとき(andやorが多い) | ❌ 通常のif/elseを使う |
| 複数の処理を実行したいとき | ❌ 通常のif/elseを使う |
| 三項演算子をネストしたいとき | ❌ if/elifで書き直す |
まとめ:Python三項演算子でコードをスッキリさせよう
この記事では、Python三項演算子の基本的な使い方について解説しました。最後に要点をまとめます。
- 三項演算子は
値1 if 条件式 else 値2の形で書く - 通常のif/elseを1行に短縮できる便利な構文
- シンプルな条件分岐・変数代入・リスト内包表記との組み合わせで特に有効
- 複雑な条件式やネストは避け、可読性を最優先にする
三項演算子を適切に活用することで、Pythonのコードがより簡潔でスッキリしたものになります。ぜひ日常のコーディングに取り入れてみてください。
Pythonの条件分岐についてさらに深く学びたい方は、以下の関連記事もあわせてご覧ください。
他にもPythonの基礎から応用まで幅広く解説していますので、トップページの記事一覧もぜひご活用ください。
