Python

【Python】データを比較する【比較演算子】

この記事では、Pythonでデータを比較する方法を解説します。

プログラミングでデータを比較するには比較演算子を使います。

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

比較演算子とは

比較演算子とは、値を比べるための演算子です。
左辺と右辺の値を比べてbool値を返します。

真ならTrue、偽ならFalseを返します。

例えば2つの値が同じかどうか調べるには==演算子を使って以下のように記述します。

num = 0

print(num == 0)
# True

print(num == 1)
# False

このように、比較演算子を使うことで値を簡単に比べることができます。
ここでは==演算子を使いましたが、その他にも様々な比較演算子が用意されています。

では比較演算子の種類を見ていきましょう!

比較演算子一覧

Pythonで使用する比較演算子は、以下のようなものがあります。

演算子意味
x == yxとyが等しければTrue
x != yxとyが等しくなければTrue
x > yxがyよりも大きければTrue
x < yxがyよりも小さければTrue
x >= yxがyよりも大きいか等しければTrue
x <= yxがyよりも小さいか等しければTrue
x in yxがyに含まれていればTrue
x not in yxがyに含まれていなければTrue
x is yxとyが同一のオブジェクトならばTrue
x is not yxと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(かつ)

書式

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

x and y 

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

サンプル

以下のコードは「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(または)

書式

orは以下のようにして使います。下記の式は、まずxを評価します。xが真ならその結果を返します。それ以外の場合は、yを評価し、その結果を返します。

x or y

orも返す値をTrueFalseに制限せず、最後に評価した引数を返します。

サンプル

以下のコードは「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(でない)

書式

notは以下のように使います。下記の式は、xが偽である場合にはTrue、それ以外の場合にはFalseになります。

not x

notは、引数の型に関係なくbool値を返します。

サンプル

以下のコードは、色々な値に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文を使うことで条件分岐させることができます。 条件分岐とは、条件に...

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

【おすすめ】Python参考書

一冊目におすすめ

created by Rinker

プログラミング初心者の方向き。とても優しい内容になっています。

二冊目におすすめ

created by Rinker

他言語を学んだことある方や中級者にスキルアップを目指している方向けです。

ゲーム開発に興味があるなら

created by Rinker

本書では基礎を学びながらゲームを作っている雰囲気を味わうことできます。