Python PR

【Python】オブジェクトを比較する方法【比較演算子】

記事内に商品プロモーションを含む場合があります

この記事では、Pythonでオブジェクトを比較する方法を解説します。

Python...というよりプログラミング言語では、オブジェクトを比較するには「比較演算子」を使います。オブジェクトを比較することでif文で条件分岐させたりすることができます。

それでは、比較演算子の種類と使い方を見ていきましょう!

比較演算子とは?

比較演算子とは、オブジェクトを比べるための演算子です。2つのオブジェクトを比べて真ならTrue、偽ならFalseを返します。

bool型(真偽値)について

例えば、オブジェクトが等価か調べるには==演算子を使います。

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

オブジェクトの識別値(ID)について

論理演算子(ブール演算子)

論理演算子のandorを使うことで複数の比較演算子を組み合わせることができます。また、notを使うことで否定を扱うことができます。

and(かつ)

下記の式では、まず x を評価します。x が偽ならばその結果を返します。それ以外の場合は y を評価し、その結果を返します。

and は、返す値を True や False に制限せず最後に評価した引数を返します。

x and y 

サンプル

以下のコードは5 <= vv < 10andで繋いでいます。まず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 < 510 <= vorで繋いでいます。まず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 <= zx < 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でオブジェクトを比較する方法を解説しました。

オブジェクトを比較することで条件分岐することができます。

if文を使った条件分岐の方法

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ