【Python】if文を1行で書く方法を初心者向けに解説!三項演算子でスッキリコードを書こう

python icon
Python

こんにちは、とまだです。

Pythonを学習していて、「if文が長くて読みづらい...」と感じたことはありませんか?

実は、簡単な条件分岐なら 1行で書ける 方法があるんです。

これを知っているだけで、コードがグッとスッキリ見やすくなります。

Pythonの三項演算子とは?一行ifの基本を理解しよう

通常のif文って、こんな感じで書きますよね。

age = 20
if age >= 18:
    message = "成人です"
else:
    message = "未成年です"

これを1行で書くと...

age = 20
message = "成人です" if age >= 18 else "未成年です"

たった1行になりました!

これが三項演算子(条件式)と呼ばれる書き方です。

基本の構文はこれだけ

結果 = 真の時の値 if 条件 else 偽の時の値

日本語で読むと「もし条件が真なら『真の時の値』を、そうでなければ『偽の時の値』を返す」という意味になります。

最初は語順に違和感があるかもしれません。

でも慣れると、とても読みやすくなりますよ。

どんな時に使える?実務でよく見る使用例

1. 変数の初期値設定

ユーザーの入力があるかどうかで、デフォルト値を設定する場面はよくあります。

# ユーザー入力がない場合はデフォルト値を使う
user_name = input_name if input_name else "ゲスト"

# もっと短く書くなら
user_name = input_name or "ゲスト"

2. 数値の符号判定

num = -5
sign = "正" if num > 0 else ("ゼロ" if num == 0 else "負")
print(f"{num}{sign}の数です")  # -5は負の数です

3. リスト内包表記との組み合わせ

これは実務でよく使います。

numbers = [1, 2, 3, 4, 5]
# 偶数は2倍、奇数はそのまま
result = [n * 2 if n % 2 == 0 else n for n in numbers]
print(result)  # [1, 4, 3, 8, 5]

4. APIレスポンスの処理

# APIから取得したデータの処理
status_text = "成功" if response.status_code == 200 else "エラー"

通常のif文と比較してみよう

可読性の比較

通常のif文

discount_rate = 0
if is_member:
    discount_rate = 0.2
else:
    discount_rate = 0

三項演算子

discount_rate = 0.2 if is_member else 0

シンプルな条件なら、三項演算子の方が見やすいですね。

複雑な条件の場合

# これは読みづらい...
result = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "D"))

# 通常のif文の方が読みやすい
if score >= 90:
    result = "A"
elif score >= 80:
    result = "B"
elif score >= 70:
    result = "C"
else:
    result = "D"

複雑な条件分岐では、通常のif文を使いましょう。

使う時の注意点

1. ネストは避ける

三項演算子の中に三項演算子を入れると、とても読みづらくなります。

# 悪い例
msg = "朝" if hour < 12 else ("昼" if hour < 18 else "夜")

# 良い例
if hour < 12:
    msg = "朝"
elif hour < 18:
    msg = "昼"
else:
    msg = "夜"

2. 処理が複雑な場合は使わない

# 悪い例(処理が複雑)
result = (calculate_complex_value() if condition else perform_another_calculation())

# 良い例
if condition:
    result = calculate_complex_value()
else:
    result = perform_another_calculation()

3. elseは省略できない

Pythonの三項演算子では、else部分は必須です。

# エラーになる
result = "OK" if condition  # SyntaxError!

# 正しい書き方
result = "OK" if condition else None

よくある間違いと対処法

1. 値と処理を混同する

# 間違い:print()は値を返さない
message = print("成功") if success else print("失敗")

# 正解:値を設定してから出力
message = "成功" if success else "失敗"
print(message)

2. Noneの扱い

# Noneチェックの場合
name = user_name if user_name is not None else "名無し"

# もっとPythonicに書くなら
name = user_name or "名無し"  # ただし空文字列も偽と判定される点に注意

実践的な活用テクニック

辞書のget()メソッドと組み合わせ

user_role = user_dict.get('role')
access_level = "admin" if user_role == "administrator" else "user"

関数の引数でのデフォルト値設定

def greet(name=None):
    display_name = name if name else "ゲスト"
    return f"こんにちは、{display_name}さん!"

データ変換での活用

# CSVデータの処理など
def convert_value(val):
    return int(val) if val.isdigit() else val

data = ["123", "abc", "456"]
converted = [convert_value(v) for v in data]
print(converted)  # [123, 'abc', 456]

まとめ

Pythonの三項演算子(一行if)は、シンプルな条件分岐をスッキリ書ける便利な機能です。

使いどころ

  • 単純な2択の条件分岐
  • 変数の初期値設定
  • リスト内包表記との組み合わせ

避けるべき場面

  • 複雑な条件分岐
  • ネストが必要な場合
  • 可読性が下がる場合

適切に使えば、コードの可読性が向上し、より Pythonic なコードが書けるようになります。

まずは簡単な条件分岐から試してみて、徐々に慣れていきましょう!

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →