Pythonの比較演算子は、値やオブジェクト間の比較を行い、その結果をブール値(真偽値、TrueまたはFalse)として返すための特殊な記号です。
参考 Pythonとは?
わかりやすく説明すると、「このりんごはあのりんごより大きいか?」、「この試験の点数は平均点と同じか?」などの質問をプログラムが理解できるようにするための特殊な記号、それが比較演算子です。そして、それらの質問の答えは「はい」または「いいえ」、つまりプログラムの世界では「True」または「False」で返されるということです。
このページではPythonの比較演算子の基本をサンプルコード付きで初心者向けにわかりやすく解説します。
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
参考 Pythonの基本文法
Python:比較演算子とは?
比較演算子とは、二つの値やオブジェクトを比較し、その結果をブール値(True または False)で返すための特殊な記号です。
Pythonの比較演算子の一覧を表形式でまとめます。
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
== | 等しい | 5 == 5 | True |
!= | 等しくない | 5 != 3 | True |
> | より大きい | 5 > 3 | True |
< | より小さい | 3 < 5 | True |
>= | より大きいか等しい | 5 >= 5 | True |
<= | より小さいか等しい | 5 <= 5 | True |
is | 同一オブジェクトである | a is a | True |
is not | 同一オブジェクトでない | a is not b | True |
この表の「例」欄では、すべての演算子が True
を返す状況を示しています。ただし、これらの演算子はそれぞれの条件により False
を返すこともあります。
上から順にサンプルコード付きで詳細を説明していきます。
Python:==
比較演算子 ==
は、二つの値が等しいかどうかを判定します。
# 変数の定義 num1 = 10 num2 = 20 num3 = 10 # == 演算子の利用 result1 = (num1 == num2) # num1とnum2は等しくないため、Falseが返る result2 = (num1 == num3) # num1とnum3は等しいため、Trueが返る # 結果の表示 print(f'num1とnum2は等しいか?: {result1}') # 出力:num1とnum2は等しいか?: False print(f'num1とnum3は等しいか?: {result2}') # 出力:num1とnum3は等しいか?: True
参考 Pythonの変数の基本 / print関数
この例では、num1
と num2
が等しくないため、result1
は False
となり、num1
と num3
が等しいため、result2
は True
となります。
Python:!=
比較演算子 !=
は、二つの値が等しくないかどうかを判定します。
# 変数の定義 num1 = 10 num2 = 20 num3 = 10 # != 演算子の利用 result1 = (num1 != num2) # num1とnum2は等しくないため、Trueが返る result2 = (num1 != num3) # num1とnum3は等しいため、Falseが返る # 結果の表示 print(f'num1とnum2は等しくないか?: {result1}') # 出力:num1とnum2は等しくないか?: True print(f'num1とnum3は等しくないか?: {result2}') # 出力:num1とnum3は等しくないか?: False
この例では、num1
と num2
が等しくないため、result1
は True
となり、num1
と num3
が等しいため、result2
は False
となります。
Python:>
比較演算子 >
は、左の値が右の値より大きいかどうかを判定します。
# 変数の定義 num1 = 10 num2 = 20 # > 演算子の利用 result = (num1 > num2) # num1はnum2より小さいため、Falseが返る # 結果の表示 print(f'num1はnum2より大きいか?: {result}') # 出力:num1はnum2より大きいか?: False
この例では、num1
が num2
より小さいため、result
は False
となります。
Python:<
比較演算子 <
は、左の値が右の値より小さいかどうかを判定します。
# 変数の定義 num1 = 10 num2 = 20 # < 演算子の利用 result = (num1 < num2) # num1はnum2より小さいため、Trueが返る # 結果の表示 print(f'num1はnum2より小さいか?: {result}') # 出力:num1はnum2より小さいか?: True
この例では、num1
が num2
より小さいため、result
は True
となります。
Python:>=
>=
: 左の値が右の値より大きいか、または等しいかを判定します。
# 変数の定義 num1 = 10 num2 = 10 # >= 演算子の利用 result = (num1 >= num2) # num1はnum2と等しいため、Trueが返る # 結果の表示 print(f'num1はnum2以上か?: {result}') # 出力:num1はnum2以上か?: True
Python:<=
<=
: 左の値が右の値より小さいか、または等しいかを判定します。
# 変数の定義 num1 = 10 num2 = 20 # <= 演算子の利用 result = (num1 <= num2) # num1はnum2より小さいため、Trueが返る # 結果の表示 print(f'num1はnum2以下か?: {result}') # 出力:num1はnum2以下か?: True
Python:is
Pythonの is
演算子は、2つのオブジェクトが同一(つまり、メモリ上の同じ位置に存在する)かどうかを判定します。
これは、オブジェクトの値が等しいかどうか(==
演算子が行うこと)とは異なる点に注意が必要です。
例えば、以下のコードを見てみましょう。
# リストの定義 list1 = [1, 2, 3] list2 = list1 # list1の参照をlist2に代入 list3 = [1, 2, 3] # 新しいリストを作成 # is 演算子と == 演算子の利用 print(list1 is list2) # 出力:True print(list1 == list2) # 出力:True print(list1 is list3) # 出力:False print(list1 == list3) # 出力:True
list1
と list2
は同一のオブジェクトを指しています。したがって、 list1 is list2
は True
を返します。また、その値も等しいので list1 == list2
も True
を返します。
一方、list1
と list3
は異なるオブジェクトを指しています(内容は同じでも、それぞれ異なるメモリ位置に存在します)。
したがって、 list1 is list3
は False
を返します。しかし、その値は等しいので list1 == list3
は True
を返します。
これらの違いを理解することは、Pythonにおけるオブジェクトの同一性と等価性を理解する上で重要です。特に、ミュータブル(=変更可能)なオブジェクト(リスト、辞書、セットなど)を扱う際には注意が必要です。
Python:is not
is not
は先ほどの is の否定版。つまり、左のオブジェクトが右のオブジェクトと非同一(つまり、メモリ上の異なる位置にある)かどうかを判定します。
# 変数の定義 list1 = [1, 2, 3] list2 = [1, 2, 3] # 新しいリストを作成 # is not 演算子の利用 result = (list1 is not list2) # list1とlist2は非同一オブジェクトなので、Trueが返る # 結果の表示 print(f'list1はlist2と非同一オブジェクトか?: {result}') # 出力:list1はlist2と非同一オブジェクトか?: True
is
と is not
演算子は、値の等しさではなく、オブジェクトの同一性を検査するという点を押さえておきましょう。
比較演算子の注意点
比較演算子を使用する際には以下の点に注意する必要があります。
注意点1:データ型の違い
Pythonでは異なるデータ型の値を比較することができますが、必ずしも期待通りの結果にならないことがあります。
例えば、整数の 5
と文字列の "5"
を比較すると、これらは等しくないと判断されます(つまり、5 == "5"
は False
を返します)。
比較を行う前に、必要に応じて適切なデータ型に変換することが重要です。
num = 5 str_num = "5" print(num == str_num) # 出力:False print(num == int(str_num)) # 出力:True
参考 データ型とは?
注意点2:浮動小数点数の比較
浮動小数点数(=小数)の比較は、計算機の精度上の問題から予想外の結果をもたらすことがあります。
例えば、0.1 + 0.2 == 0.3
は False
を返します。これは、多くのシステムで浮動小数点数が2進数で内部的に表現され、そのために丸め誤差が生じるためです。この問題を避けるためには、一定の許容誤差内で等しいと判断するなどのアプローチがあります。
print(0.1 + 0.2 == 0.3) # 出力:False epsilon = 1e-10 print(abs((0.1 + 0.2) - 0.3) < epsilon) # 出力:True
注意点3:NaNの比較
NaNは "Not a Number" の略で、数学的に定義できない数値計算の結果を表すために使用されます。
たとえば、0での除算や負の数の平方根などがNaNを生成します。
Pythonでは、浮動小数点数のNaNは float('nan')
で生成できます。しかし、NaNは一般的な値とは異なり、自分自身と等しくないという特性があります。つまり、nan == nan
は False
を返します。これはNaNが数学的に未定義の結果を表現しているため、その値が何であるかを正確に定義することはできません。
# NaNの生成 nan = float('nan') # 自分自身との比較 print(nan == nan) # 出力:False # math.isnan関数を使用したNaNのチェック import math print(math.isnan(nan)) # 出力:True
上記のコードでは、nan == nan
が False
を返すことを確認できます。そのため、NaNの存在を確認するためには math.isnan
関数を使用します。これは、値がNaNであるかどうかをチェックし、その結果を真偽値で返します。
注意点4:オブジェクト同一性の比較
is演算子の所で説明した内容と重複しますが、重要な内容なので改めて説明します。
is
演算子と ==
演算子は異なる意味を持ちます。is
演算子はオブジェクトの同一性を検査しますが、==
演算子は値の等価性を検査します。これらを混同しないように注意が必要です。
list1 = [1, 2, 3] list2 = list1 list3 = [1, 2, 3] print(list1 == list2) # 出力:True print(list1 is list2) # 出力:True print(list1 == list3) # 出力:True print(list1 is list3) # 出力:False
Pythonを1から学習したい方は
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!