Python

【Python】データを比較する方法を解説【比較演算子】

この記事では、Pythonでデータを比較する方法を解説します。データを比較するには「比較演算子」を使います。データを比較することでif文で条件分岐させたりすることができます。では、比較演算子の種類と使い方を見ていきましょう!

比較演算子とは?

比較演算子とは値を比べるための演算子です。左辺と右辺の値を比べ、真ならTrue、偽ならFalseを返します。

例えば、値が同じかどうか調べるには、==演算子を使います。

num = 0

print(num == 0)
# True

print(num == 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を返します。

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

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

論理演算子の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 <= zは、x < y <=zと書き換えることができます。

参考6. 式 (expression) — Python 3.9.0 ドキュメント

書式

形式的には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

サンプル

試しに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でデータを比較する方法を解説しました。

データを比較することで条件分岐することができます。

【Python】if文を使った条件分岐の方法この記事では、Pythonのif文の使い方を解説します。if文を使うことで条件分岐することができます。条件分岐とは、条件によって処理を分岐させることを言います。それでは、if文の使い方を見ていきましょう! ...

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』