この記事では、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でオブジェクトを比較する方法を解説しました。
オブジェクトを比較することで条件分岐することができます。
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ