この記事では、Pythonでオブジェクトを比較する方法を解説します。
Python...というよりプログラミング言語では、オブジェクトを比較するには「比較演算子」を使います。オブジェクトを比較することでif文で条件分岐させたりすることができます。
それでは、比較演算子の種類と使い方を見ていきましょう!
比較演算子とは?
比較演算子とは、オブジェクトを比べるための演算子です。2つのオブジェクトを比べて真ならTrue、偽ならFalseを返します。
例えば、オブジェクトが等価か調べるには==演算子を使います。
num = 0 print(num == 0) # True print(num == 1) # False
上記コードでは、0 を代入したnum変数と 0 と 1 が同じかを比較しています。0 と比較した際にはTrueが返され、1 と比較した際にはFalseが返されました。
このように、比較演算子を使うことで簡単にオブジェクトを比較することができます。
ここでは、例として==演算子を使いましたが、他にもさまざまな比較演算子が用意されています。その他の比較演算子も見ていきましょう!
比較演算子一覧
Pythonには、以下のような比較演算子が用意されています。
| 演算子 | 意味 |
|---|---|
| x == y | x と y が等しければ True |
| x != y | x と y が等しくなければ True |
| x > y | x が y よりも大きければ True |
| x < y | x が y よりも小さければ True |
| x >= y | x が y よりも大きいか等しければ True |
| x <= y | x が y よりも小さいか等しければ True |
| x in y | x が y に含まれていれば True |
| x not in y | x が y に含まれていなければ True |
| x is y | x と y が同一のオブジェクトならば True |
| x is not y | x と y が同一のオブジェクトでなければ True |
それぞれの比較演算子のサンプルを見てみましょう!
等しい、等しくない(==, !=)
==演算子は、等しければTrue、等しくなければFlaseを返します。!=は等しくなければ True、等しければFalseを返します。
x = 1 y = 1 print(x == y) # True print(x != y) # False
大なり、小なり(>, <)
>、<演算子は、値の大小を比較することができます。同等の値はFalseとなります。
x = 2 y = 1 print(x > y) # True print(x < y) # False
大なりイコール、小なりイコール(>=, <=)
>=、<=演算子は、値の大小を比較することができます。同等の値はTrueとなります。
x = 2 y = 1 print(x >= y) # True print(x <= y) # False
含まれるかどうか(in)
in演算子は、リストやタプルなどのコレクションオブジェクト内に指定した要素が入っているかどうかを判別できます。
x = 1 y = [1, 2, 3] print(x in y) # True print(x not in y) # False
文字列にも使うことができます。
s = 'あいうえお' print('あ' in s) # True print('あ' not in s) # False
同一オブジェクトかどうか(is)
is演算子は、同一のオブジェクトを参照しているかどうかを判別できます。
x = [1, 2, 3] y = x z = [1, 2, 3] print(x is y) # True print(x is z) # False print(x is not z) # True
x is yは、同じオブジェクトを参照しているのでTrueとなります。x is zは、値は同じですが違うオブジェクトを参照しているのでFalseとなります。x is not zは、notが付いているので評価が逆転してTrueが出力されます。
また、is演算子はNone判定にも使われます。
value = None print(value is None) # True print(value is not None) # False
論理演算子(ブール演算子)
論理演算子のandとorを使うことで複数の比較演算子を組み合わせることができます。また、notを使うことで否定を扱うことができます。
and(かつ)
下記の式では、まず x を評価します。x が偽ならばその結果を返します。それ以外の場合は y を評価し、その結果を返します。
and は、返す値を True や False に制限せず最後に評価した引数を返します。
x and y
サンプル
以下のコードは5 <= vとv < 10をandで繋いでいます。まず5 <= vが評価され、偽でなければv < 10の結果が返されます。
v = 6 b = 5 <= v and v < 10 print(b)
実行結果
True
andは、bool値以外の値も返せるので以下のような使い方もできます。
flag1 = True flag2 = True def run(): return 'run実行' # flag1とflag2が偽でなければrun関数が実行される result = flag1 and flag2 and run() print(result)
実行結果
run実行
or(または)
下記の式は、まず x を評価します。x が真ならその結果を返します。それ以外の場合は、y を評価し、その結果を返します。
orも返す値を True や False に制限せず、最後に評価した引数を返します。
x or y
サンプル
以下のコードはv < 5と10 <= vをorで繋いでいます。まずv < 5が評価され、真ならばその結果が返されます。それ以外の場合は10 <= vが評価され、その結果が返されます。
v = 4 b = v < 5 or 10 <= v print(b)
実行結果
True
or では、以下のようにデフォルト値を渡すこともできます。
s = '' # sが空の場合、デフォルト値を渡すことができる s = s or 'default' print(s)
実行結果
default
not(でない)
下記の式は、x が偽である場合にはTrue、それ以外の場合にはFalseになります。
notは引数の型に関係なくbool値を返します。
not x
サンプル
以下のコードは、色々な値にnotを付けて出力しています。
print(f"not '' = {not ''}") print(f"not 'hoge' = {not 'hoge'}") print(f'not 0 = {not 0}') print(f'not 1 = {not 1}') print(f'not False = {not False}') print(f'not True = {not True}')
実行結果
not '' = True not 'hoge' = False not 0 = True not 1 = False not False = True not True = False
比較の連鎖
比較はいくらでも連鎖することができます。
例えばx < y and y <= z は x < y <=zと書き換えることができます。
書式
形式的にはa,b,c,...y,zが式でop1,op2,...opNが比較演算子である場合、以下の2つは等価となります。
a op1 b op2 c ... y opN z a op1 b and b op2 c and ... y opN z
参考6. 式 (expression) — Python 3.9.0 ドキュメント
サンプル
試しにandを使った式を比較の連鎖で書き換えてみます。
x = 3 # 0 < x and x < 5 print(0 < x < 5) x = 3 y = 7 # 0 < x and x < 5 and 5 < y and y < 10 print(0 < x < 5 < y < 10)
実行結果
True True
比較の連鎖の注意
比較を連鎖して記述した場合、各式は一度しか評価されません。
以下のコードを見てください。
def func(x): print('func 実行') return x 0 < func(3) < 5 # func 実行 0 < func(3) and func(3) < 5 # func 実行 # func 実行
連鎖を使った場合では、func()関数が一度しか呼び出されていないのに対してandを使った場合では2度呼び出されています。
このように、比較を連鎖すると一度しか式が評価されないので注意しましょう!
まとめ
この記事では、Pythonでオブジェクトを比較する方法を解説しました。
オブジェクトを比較することで条件分岐することができます。
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ


