比較演算

制御文の最初は条件分岐を説明しますが、その前に準備として比較演算について解説します。
(注)以前、上記内容の演算を「関係演算」と記述していましたが、RDBMSの用語と混同する恐れがあるため公式ページに倣い「比較演算」に記述を改めました。参考:関係演算子

比較演算

bool型で簡単に説明しましたが、比較演算を使用すると2つの変数を比較し、比較結果を真理値で得ることができます。Pythonでは以下のような比較演算が使用できます。リストや辞書のページで解説したinは実は比較演算の一種なのです。

x == y x と y は等しい
X != y x と y は等しくない
x > y x は y よりも大きい
x < y x は y よりも小さい
x >= y x は y 以上である
x <= y x は y 以下である
x in y x という要素 が y に存在する
x not in y x という要素 が y に存在しない

等しい・等しくない

2変数が等しいかどうかを調べる場合、==演算子を使用します。等しい場合はTrueが、そうでない場合はFalseが返されます。

x = 3
y = 3
z = 7

b1 = (x == y)
b2 = (x == z)

print(b1) # True
print(b2) # False

一方、等しくない場合は!=を使用します。先ほどとは逆に等しくない場合はTrueが、等しい場合はFalseが返されます。

x = 3
y = 3
z = 7

b1 = (x != y)
b2 = (x != z)

print(b1) # False
print(b2) # True

大なり小なり

数学と同様、大なり小なり記号を使用して2変数の大小関係を得ることができます。Pythonの特徴の1つに、比較演算子を同時に複数使用することができる、ということが挙げられます。便利な書き方なので、是非活用してみてください。サンプルで確認してみましょう。

x = 3
y = 5
z = 7

b1 = (x < y)
print(b1) # Trueが出力される

b2 = (x < y < z)
print(b2) # Trueが出力される

数学の不等号と同じなのですんなり飲み込めたのではないでしょうか。

含まれる・含まれない

リスト、タプル、setなど複数の値を持つコレクションの場合、in、not inである要素が含まれているかどうかを判定することができます。以下のコードでは3と4がリストl1に含まれているかどうかを調べています。

l = [1, 3, 5, 7]
b1 = (3 in l)
print(b1)  # True

b2 = (4 in l)
print(b2)  # False

is オブジェクトの同一性

Pythonのオブジェクトはそれぞれユニークなid(識別子)を持っており、これはオブジェクトのIDと呼ばれています。メモリ上のアドレスの一種だと捉えても差し支えありません。オブジェクトが同一であるとは、変数が同じアドレスを指している場合のことを指します。

さてそのオブジェクトのIDですが、組み込み関数のid関数でを取得することができます。2つのオブジェクトが同一のオブジェクトかどうか、つまりIDが等しいかどうかを判定する場合、イコールではなくisを利用します。一方で、同じ値を持つかどうかの判定は、先程の説明の通り==演算子を使用します。サンプルで確認してみましょう。

x = [1, 2]
y = x
z = [1, 2]

# IDを確認する
print(id(x))
print(id(y))
print(id(z))


# 同じ値かどうかを判定
b1 = (x == y)
b2 = (x == z)
print(b1) # True
print(b2) # True

# 同じオブジェクトかどうかを判定
b3 = (x is y)
b4 = (x is z)
print(b3) # True
print(b4) # False

yはxの値を代入したものなので、同じオブジェクトを指し示しています。zはxと同じ値ですが、新たに作成したオブジェクトですので、isで比較するとFalseと評価されます。