【Python】if文を1行でスッキリ書く!短い条件分岐の書き方を初心者向けに詳しく解説

はじめに

Python でコードを書き始めると、さまざまな場面で if 文 を使うことがありますね。
通常の if 文は複数行で書かれるケースが多いですが、実は一行で書く方法が存在します。
「一行 if」や「三項演算子」という言い方をされることもあり、とてもコンパクトにコードをまとめられるのが魅力です。

一見すると「そんなに短く書く必要があるの?」と思うかもしれません。
しかし、簡単な条件だけをサッと記述したいときや、リストの要素を絞り込むときなどにとても役立ちます。
実務においては、わずかな行数で分岐処理をまとめられるため、可読性やメンテナンス性の面でもメリットが得られる可能性があります。

ただし、短く書ける反面、コードがわかりにくくなるリスクもあります。
特にプログラミング初心者の方にとっては、一行 if 特有の書き方に慣れるまで少し時間がかかるかもしれません。
そこで今回は、初心者向けに Python の一行 if について詳しく解説していきます。

実際のコード例をいくつか示しながら、どのようなシーンで使えるか、また従来の if 文とどう違うのかを整理します。
あわせて、書く際の注意点や実務での利用シーンも取り上げますので、ぜひ最後まで読んでみてください。

この記事を読むとわかること

  • Python の 一行 if の基本的な書き方
  • 一行 if が役立つ実務的な活用シーン
  • 一行 if を使ううえで気をつけたいこと
  • 従来の複数行 if 文との違いや比較
  • コードを簡潔に書くためのヒント

Pythonの一行ifとは

Python では普通、if 文のあとに改行してインデントを入れつつ処理内容を書きますよね。
しかし、条件によって値を変えたいときや、短い処理をサッと書きたいときは、一行で記述できる仕組みがあります。
これは 三項演算子 などと呼ばれる書き方で、たとえば「 A if 条件 else B 」のような形をとります。

一行ifの基本構文

Python の一行 if は、以下のような構文で書かれます。
「真の場合の式」と「偽の場合の式」、そして「条件」を組み合わせるイメージです。

真の場合に返したい値 if 条件式 else 偽の場合に返したい値

従来の if 文で書くと複数行になる内容でも、これなら一行ですっきり表現できます。
たとえば、数値が正かどうかを判定してメッセージを返すケースを考えてみましょう。

num = 10
message = "正の数です" if num > 0 else "0または負の数です"
print(message)  # 正の数です

このように、 if num > 0 が真のときは "正の数です" を返し、そうでない場合は "0または負の数です" を返します。
従来の書き方であれば、少なくとも3行程度のコードになるところが、一行でまとまっているのが特徴です。

一行ifでの式の流れ

もう少し深掘りしてみます。
真のときの値 if 条件式 else 偽のときの値 」という順序で書くので、最初に「真のときは何を返すか」を書きます。
その後で if 条件式 が続き、最後に else 偽のときは何を返すか を書くイメージです。

初めて見ると「普段の if と書く順番が逆なのでは?」と感じることがあるかもしれません。
確かに従来の if 文とは順番が異なりますが、慣れてしまえば簡潔に状態を表現できるようになります。
「こういう書き方もあるんだな」と、まずは気軽に覚えてみてください。

一行ifが活躍する場面

一行 if が一番活きるのは「値の分岐」です。
例えば、引数で受け取った数値が正なら「正の数」、負なら「負の数」として文字列をセットしたい場合や、リスト内包表記と組み合わせて「条件を満たすときだけ特定の値を返す」などに便利です。

特に、複雑なロジックというよりは、シンプルな分岐 で使うとよいでしょう。
あまりに条件が長かったり、処理内容が多くなると可読性が下がることがあるからです。
その点、初心者の方もぜひ気をつけてください。

一行でスッキリ書ける反面、他の人がコードを読んだときに「これ何をしているんだろう?」と混乱してしまう場合があります。
したがって、状況に応じて使い分けることが重要です。

一行ifを使う際に気をつけたいこと

一行 if は便利ですが、いくつかの注意点があります。
細かいところまで理解しておかないと、可読性を損なったり予期せぬ挙動を起こしたりするおそれがあるのです。

複数条件の書き方

複数条件を使いたい場合は、従来の if 文を使ったほうがわかりやすいケースも多いです。
例えば、 A > 0 のときは「正の数」、 A == 0 のときは「0」、 A < 0 のときは「負の数」としたい場合、一行だけで書こうとすると複雑になります。

num = 0
result = "正" if num > 0 else ("0" if num == 0 else "負")
print(result)

この例だと、一応一行に収まっていますが「if の中にさらに if がある」状態です。
最初に num > 0 をチェックし、真であれば "正"、偽であればさらに num == 0 をチェックするという流れですね。

もちろんこれでも動作はしますが、可読性が低くなりやすいです。
こういった場合は、複数行の if-elif-else を使ったほうが、ひと目で処理がわかるかもしれません。

可読性とのバランス

一行で書けるからといって、必ずしも一行で書くべきとは限りません。
とりわけ、プログラミングの初心者の方が最初から一行 if を多用してしまうと、逆にコードが読みにくくなってしまうことがあります。
チームで開発するときや長期的にメンテナンスするシステムでは、可読性は非常に大切です。

「この if は単純な条件しか見ていないから、一行でまとめてもわかりやすいな」と思えるときにだけ使う、というスタンスでよいでしょう。
また、初心者の方はまず従来の if 文になじんでおき、それから一行 if を覚えていくとスムーズです。

一行 if は、「条件によって返す値が2種類しかない」「処理がとても軽い」などの場面で使うとわかりやすいでしょう。

実務での利用例

実務では、データ処理や API レスポンスの整形など、様々な場面で Python が使われます。
ここでは、一行 if が具体的にどう役立つかをいくつかのシーンに分けて見ていきましょう。

フィルタリング処理

リストなどのコレクションから要素を絞り込むとき、一行 if は便利です。
以下は、数値リストから偶数だけを取り出す例です。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)  # [2, 4, 6]

上記は一行 if というより「リスト内包表記」ですが、if 条件を一行に記述している点が似ています。
if n % 2 == 0 」のところで条件を満たす要素だけを結果リストに入れています。
実際の開発でも、たとえばIDの一覧から特定の属性を持つユーザーだけを抽出するなどの処理に応用できます。

もちろん、「値をどう変換するか」というところで三項演算子的な書き方を使うことも可能です。
下記のように、「偶数は 'even'、奇数は 'odd' に変換する」という使い方で書くこともあります。

odd_or_even = ["even" if n % 2 == 0 else "odd" for n in numbers]
print(odd_or_even)  # ['odd', 'even', 'odd', 'even', 'odd', 'even']

こちらの書き方だと、結果リストの各要素に対し一行 if で変換処理を行っています。
実務で「何らかの条件によって文字列を切り替えたい」といった場合に、とても重宝します。

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

リスト内包表記を使うと、for 文と if 文を一行でまとめる記法ができます。
先ほどの例のように、 ["..." if ... else "..." for n in numbers] という書き方をすると、コード量が最小限に抑えられます。

実務では、JSON データを扱うときに「条件に応じてキーを変換する」「数値がマイナスの場合は 0 に変換する」など、いろいろな場面があります。
わずかな条件分岐をさっと書きたいときは、一行 if とリスト内包表記をセットにするとスッキリするでしょう。

一方で、複雑なビジネスロジックをゴリゴリに詰め込んでしまうと、可読性を損ねる危険性があります。
多くの条件分岐が必要になるような処理は、素直に従来の複数行の if 文や関数を使ったほうが安全かもしれません。

一行ifと従来のif文の比較

ここまでに出てきたように、一行 if はコードの省略ができる点が最大の魅力です。
しかし、どのような場面でも使えるわけではありません。
従来の if 文との違いを把握しておきましょう。

処理フローの違い

従来の if 文の場合、以下のように書きます。

if condition:
    # 条件が真なら処理する
else:
    # 条件が偽なら処理する

一方で、一行 if では以下のように書きます。

真のときの値 if condition else 偽のときの値

この書き方だと、「条件が真のときの値」を先に書いてから if condition と続き、最後に else 偽のときの値 がくるため、初心者にとっては戸惑いがあるかもしれません。
また、一行 if は結果を変数に入れるようなケースでよく使われますが、複数ステップの処理を行うには向きません。

パフォーマンスの観点

一行 if を使うことでパフォーマンスが大きく向上するわけではありません。
実行速度という点では、ほとんど差がありません。
コードが少し短くなるくらいなので、そのぶん読みやすいかどうかはケースバイケースでしょう。

以下の点を考慮すると、一行 if はあくまで「短く書くための記法」と割り切るのがよいかもしれません。

  • 複雑なロジックには向かない
  • 多くの人が読んだときに戸惑わないか
  • 変更や拡張が起きたときに対応しやすいか

一行ifのバリエーション

ここまで、「 A if 条件 else B 」という基本パターンを紹介してきました。
しかし、実は一行 if には、少し異なるバリエーションの書き方もあります。
いくつかサンプルを見てみましょう。

elseを使わない書き方

たとえば、「条件が真の場合だけ処理を行い、偽の場合は何もしない」という場面があります。
複数行の if 文なら以下のように書くでしょう。

if user_age > 18:
    print("成人です")

一行 if ではどう書くのでしょうか。
厳密には「何もしない」部分を else Noneelse "" などで埋める必要があります。
つまり次のように書けます。

user_age > 18 and print("成人です")

これは、論理演算子の and を使ったテクニックです。
user_age > 18 が真の場合のみ右辺が評価され、偽ならば無視されるという仕組みですね。
一見便利そうに見えますが、可読性は微妙なところです。
状況によっては使ってもいいですが、あまり乱用すると意図が伝わりにくくなるので注意しましょう。

passの利用例

複数行の if 文で、「条件が真のときは特に何もしない」という場合、よく使われるのが pass です。
下記のようなイメージですね。

if score < 0:
    pass
else:
    print("スコア:", score)

このロジックを一行でまとめようとすると無理があります。
A if condition else B の形に「何もしない (pass)」をうまくはめ込むと、かえって可読性が下がるからです。
その場合は、素直に複数行を使うほうが理解しやすいでしょう。

実務シーンで発生しやすいトラブル

一行 if は便利ですが、実務で使っていると以下のようなトラブルに直面することがあります。
事前に把握しておくと、コードを書くときに役立ちます。

三項演算子の理解不足

初心者の方の中には、「Python も C 言語のような三項演算子があるんだ」と認識しておらず、初めて見たときに戸惑う人がいます。
コードレビューなどで突然登場すると「知らない書き方だから、どう動くかわからない」となるかもしれません。
チームでコードを書くなら、ドキュメントやコーディング規約に「一行 if を使う場合はこう書く」とまとめておくと混乱を減らせます。

予期せぬ型変換

一行 if の中で、値として数値や文字列、リストなど、さまざまな型を混在させた結果、思わぬ型変換が発生するケースがあります。
例えば、真の場合は整数を返し、偽の場合は文字列を返すなどという書き方をしてしまうと、後々の処理で型エラーを起こす可能性が高いです。
なるべく同じ型を返すように心がけましょう。

一行 if の中で返す値が、真と偽で全く異なる型になっていないか確認することが大切です。

おすすめの書き方

ここまでの内容を踏まえて、一行 if を使う場合のポイントをまとめます。
初心者の方も、実務ですぐに使う方も、ぜひ参考にしてください。

シンプルにまとめる

一行 if を使う場面は、「わずかな条件で値を分けるだけ」に留めましょう。
複雑なロジックや多段階の分岐は、従来の if 文や関数化など、別の方法を使うほうが可読性が高まります。
実際の業務でも、後からコードを見返したときにすぐ理解できるようにしておくことが重要です。

コメントの使い方

一行 if の書き方が他のエンジニアにとって少しわかりにくい場合は、簡単なコメントを添えるとよいでしょう。
以下のようにすると、意図が伝わりやすくなります。

# numが正なら"OK"、そうでなければ"NG"を返す
message = "OK" if num > 0 else "NG"

コメントを加えることで、「一行 if を使っているのはここだ」とすぐにわかります。
社内のチームメンバーや、これからコードを読む人にも優しい書き方になるでしょう。

まとめ

ここまで、Python の 一行 if をテーマに解説してきました。
三項演算子を使った書き方は、一見すると複雑に思えるかもしれませんが、実はとてもシンプルです。
わずかな行数で短いロジックを表現できるため、場面によってはコード量を大きく減らせます。

ただし、どんなに短く書けても、あまり複雑なロジックを詰め込みすぎると可読性が下がります。
プログラミング初心者の方は、まずは従来の複数行 if 文の使い方に慣れ、慣れてから一行 if を導入するのが良いでしょう。
あくまで一つの記法として、必要に応じて使い分けるイメージを持ってください。

実務においては、一行 if がデータ変換やリスト内包表記などで活躍することも多いです。
特に「条件に応じて返す値を2種類に絞るだけ」のようなシンプルな場合に威力を発揮します。
その一方で、複数の条件が絡む複雑な分岐は、従来の複数行の if 文を使うのが無難です。

Python には他にも便利な書き方や構文がたくさんありますが、一行 if を適切に活用することで、コード全体がスマートになることもあります。
ぜひこの機会に、実際に手を動かしながら慣れていってみてください。
「こういうシーンでは一行 if を使うと便利だな」と思えるようになると、Python のコーディングがより楽しくなるでしょう。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。