Pythonの連鎖比較演算子: a < b < c のような書き方を解説

Pythonでプログラムを書く際、「ある値が特定の範囲内にあるか」を判定したいことがよくあります。例えば、「スコアが80点以上、かつ100点未満」といった条件です。

多くのプログラミング言語では、これを and 演算子を使って (80 <= score) and (score < 100) のように記述する必要があります。

しかし、Pythonでは、数学の表記と同じように 80 <= score < 100連鎖させて書くことができます。この記事では、この便利で可読性の高い「連鎖比較演算子」について解説します。

目次

連鎖比較の基本的な使い方

連鎖比較は、複数の比較演算子(<, >, <=, >=, ==, !=)を続けて記述する構文です。

これは、and で結合された複数の比較として自動的に解釈されます。

  • a < b < c(a < b) and (b < c) と等価です。
  • a <= b < c(a <= b) and (b < c) と等価です。

1. 数値の範囲チェック

連鎖比較が最もよく使われるのは、数値が特定の範囲内にあるかどうかの判定です。

def get_grade(score):
    """
    点数に応じて評価を返す
    """
    # 80点以上、かつ100点以下
    if 80 <= score <= 100:
        return "優"
    # 60点以上、かつ80点未満
    elif 60 <= score < 80:
        return "良"
    # 0点以上、かつ60点未満
    elif 0 <= score < 60:
        return "可"
    else:
        return "範囲外"

# 実行
print(f"95点: {get_grade(95)}")
print(f"70点: {get_grade(70)}")
print(f"40点: {get_grade(40)}")

実行結果:

95点: 優
70点: 良
40点: 可

2. and を使った場合との比較

もし連鎖比較を使わずに and で記述すると、以下のようになります。

# 'and' を使った記述(動作は同じだが、冗長)
if (60 <= score) and (score < 80):
    return "良"

60 <= score < 80 と書くほうが、score という変数を2回書く必要がなく、直感的で読みやすいことがわかります。

複数の異なる演算子の組み合わせ

連鎖比較では、異なる種類の比較演算子を組み合わせることも可能です。==!= も含めることができます。

a = 10
b = 20
c = 20

# (a < b) かつ (b == c) か?
check1 = (a < b == c)
print(f"a < b == c : {check1}") # True

# ---
x = 5
y = 5
z = 10

# (x == y) かつ (y < z) か?
check2 = (x == y < z)
print(f"x == y < z : {check2}") # True

実行結果:

a < b == c : True
x == y < z : True

注意点

この構文は、a < bb < c が評価される際、b が2回評価されるわけではありません。Pythonは a < b をまず評価し、それが True であった場合にのみ b < c の評価に進みます(短絡評価)。

まとめ

  • Pythonでは、a < b < c のように比較演算子を連鎖させて記述できます。
  • これは (a < b) and (b < c) と自動的に解釈されます。
  • 80 <= score < 100 のように、数値の範囲を判定する if 文などで使用すると、コードの可読性が大幅に向上します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次