Pythonのノットイコール(!=)の使い方

【Python】ノットイコール(!=)の使い方

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonでコードを書いていると、「2つの値が等しくないか」を判定したい場面が頻繁に出てきます。たとえば、ユーザーの入力値が期待する値と異なるときに処理を分岐させたり、特定の条件を満たさない要素だけを抽出したりするケースです。

このような場面で使うのが、ノットイコール演算子(!=)です。!=演算子とは、左辺と右辺の値が等しくないかを判定する比較演算子で、等しくなければTrue、等しければFalseを返します。

この記事では、Pythonのノットイコール(!=)演算子の基本的な書き方から、if文while文リスト内包表記での実践的な使い方まで、サンプルコード付きで解説していきます。



Pythonのノットイコール(!=)演算子の使い方

Pythonのノットイコール(!=)演算子は、2つの値が等しくないかを判定する比較演算子です。基本的な書き方は、以下の通りです。

a != b  # aとbが等しくなければTrue、等しければFalse

!=演算子は数値や文字列、リスト、辞書など、組み込みの主要なデータ型に対して使用できます。ただし、比較の結果は各データ型の等価性の定義に依存する点には注意が必要です。ここでは、以下の4つの活用パターンを解説します。

  1. 数値や文字列を比較する
  2. if文で条件分岐する
  3. while文でループを制御する
  4. リスト内包表記でフィルタリングする

それぞれの活用パターンには異なる特徴があり、実務のさまざまな場面で役立ちます。

それでは各パターンについて、解説していきます。

数値や文字列を比較する

!=演算子の最も基本的な使い方は、2つの値を直接比較することです。数値どうしの比較では、値そのものが異なればTrueを返します。

x = 10
y = 20

print(x != y)   # True(10と20は異なる)
print(x != 10)  # False(10と10は等しい)

上記のコードでは、変数xとyに異なる数値を代入し、!=演算子で比較しています。x != yはTrueを返し、x != 10はFalseを返します。

文字列の比較では、大文字と小文字が区別される点に注意が必要です。以下のサンプルコードで確認してみましょう。

name1 = "Python"
name2 = "python"

print(name1 != name2)  # True(大文字・小文字が異なる)
print("hello" != "hello")  # False(完全に一致)

上記のコードでは、「Python」と「python」を比較しています。Pythonでは大文字と小文字を別の文字として扱うため、!=演算子はTrueを返します。大文字・小文字を区別せずに比較したい場合は、簡易的にはlower()メソッドで統一する方法が有効です。Unicodeの特殊な文字(例:ドイツ語の「ß」)を含む文字列でより厳密に比較したい場合は、casefold()メソッドの利用が推奨されます。

なお、浮動小数点数float型)の比較では、内部的な表現誤差によって意図しない結果になることがあります。詳しくは記事下部の「浮動小数点数(float)を!=で比較しても大丈夫ですか?」をご覧ください。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

if文で条件分岐する

!=演算子は、if文の条件式で頻繁に使われます。特定の値と異なる場合にのみ処理を実行したいときに便利です。

user_role = "guest"

if user_role != "admin":
    print("管理者権限が必要です")
else:
    print("管理画面を表示します")

上記のコードでは、user_roleが「admin」と異なる場合に「管理者権限が必要です」と表示し、一致する場合は「管理画面を表示します」と表示します。

elif文と組み合わせることで、複数の条件を段階的にチェックすることも可能です。以下のサンプルコードでは、ステータスコードに応じた処理を分岐しています。

status = "error"

if status != "success" and status != "pending":
    print("エラーが発生しました")
elif status != "success":
    print("処理中です")
else:
    print("処理が完了しました")

上記のコードでは、and演算子を使って複数の!=条件を組み合わせています。statusが「success」でも「pending」でもない場合にエラーメッセージを表示する構成です。

while文でループを制御する

!=演算子をwhile文の条件式に使うことによって、特定の値になるまでループを継続する処理を実装できます。ユーザー入力の検証など、終了条件が特定の値と一致するかどうかで決まる場面で有効です。

user_input = ""

while user_input != "quit":
    user_input = input("コマンドを入力してください(終了はquit): ")
    if user_input != "quit":
        print(f"入力値: {user_input}")

print("プログラムを終了します")

上記のコードでは、ユーザーが「quit」と入力するまでループが継続します。!=演算子がwhile文の条件として機能し、入力値が「quit」と等しくない間はループ内の処理を繰り返します。

一方、カウンターで回数を制御する場合は、!=ではなく「<」や「<=」といった単調な比較演算子を使う方が安全です。!=でカウンタを比較すると、加算幅や更新タイミングのズレで目標値を飛び越えた際に無限ループに陥る可能性があります。

count = 0
target = 5

# 推奨: 単調比較を使う
while count < target:
    print(f"現在のカウント: {count}")
    count += 1

print(f"カウントが{target}に到達しました")

!=は「特定の値になったら止める」という意図が明確な場面で使い、カウンタによる回数制御には<や<=を使うと覚えておきましょう。

リスト内包表記でフィルタリングする

リスト内包表記とは、既存のリストから条件に合う要素だけを抽出して新しいリストを生成するPythonの構文です。!=演算子を条件式に使うことによって、特定の値を除外したリストを簡潔に作成できます。

numbers = [1, 2, 3, 2, 4, 2, 5]
filtered = [n for n in numbers if n != 2]

print(filtered)  # [1, 3, 4, 5]

上記のコードでは、リストnumbersから値が2の要素を除外した新しいリストfilteredを生成しています。!=演算子がフィルタ条件として機能し、2以外の全ての要素が抽出されます。

文字列のリストに対しても同様のフィルタリングが可能です。以下のサンプルコードでは、空文字列を除外しています。

words = ["hello", "", "world", "", "python"]
non_empty = [w for w in words if w != ""]

print(non_empty)  # ['hello', 'world', 'python']

上記のコードでは、リストwordsから空文字列("")を除外しています。データのクレンジング処理など、不要な値を取り除く場面で!=演算子とリスト内包表記の組み合わせは非常に実用的です。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

Pythonのノットイコール(!=)とis notの違い

Pythonには、!=演算子のほかにis notという演算子があります。どちらも「等しくない」を判定する点は共通していますが、比較する対象が異なります。!=演算子は「値」を比較し、is not演算子は「オブジェクトの同一性(同じオブジェクトを指しているか)」を比較します。

以下は、!=とis notの違いをまとめた比較表です。

項目 !=演算子 is not演算子
比較対象 値が等しいか 同じオブジェクトを指しているか
判定基準 各データ型の等価性の定義(内部的には__eq__や__ne__) オブジェクトの同一性
主な用途 数値・文字列・リストの比較 None等のシングルトンオブジェクトとの比較

なお、!=演算子の内部動作は厳密にはシンプルではありません。Pythonは「rich comparison」と呼ばれる仕組みで比較を行い、__ne__メソッドの実装がない場合は__eq__メソッドの結果を反転するなど、段階的に評価されます。初学者の段階では「値が等しいかを判定する」という理解で十分ですが、カスタムクラスでは比較の挙動をオーバーライドできる点は覚えておきましょう。

この違いを理解するために、以下のサンプルコードを確認してみましょう。

a = [1, 2, 3]
b = [1, 2, 3]
c = a

# 値の比較(!=)
print(a != b)      # False(値は同じ)
print(a != c)      # False(値は同じ)

# 同一性の比較(is not)
print(a is not b)  # True(別のオブジェクト)
print(a is not c)  # False(同じオブジェクト)

上記のコードでは、aとbは同じ値を持つリストですが、それぞれ別のオブジェクトとして生成されています。そのため、!=演算子ではFalse(値は等しい)、is not演算子ではTrue(別のオブジェクト)と判定されます。一方、cはaと同じオブジェクトを参照しているため、どちらの比較でもFalseが返ります。

Noneとの比較では、!=ではなくis notを使うことがPythonの公式スタイルガイド(PEP 8)で推奨されています。

Comparisons to singletons like None should always be done with is or is not, never the equality operators.
(Noneのようなシングルトンとの比較は、常にisまたはis notで行うべきであり、等価演算子を使うべきではありません)
出典:PEP 8 – Style Guide for Python Code

以下のサンプルコードで確認してみましょう。

value = None

# 推奨される書き方
if value is not None:
    print("値が設定されています")

# 非推奨の書き方(動作はするが推奨されない)
if value != None:
    print("値が設定されています")

上記のコードでは、どちらの書き方でも同じ結果になりますが、is notを使う方が推奨されます。Noneはプログラム中に1つしか存在しないシングルトンオブジェクトであるため、同一性の比較が最も自然であること、そして==や!=はクラス側で__eq__や__ne__をオーバーライドできるため、意図しない比較結果が返る可能性があることが主な理由です。

実務では、Noneとの比較にはis notを使い、値の比較には!=を使うと覚えておきましょう。

Pythonのノットイコール(!=)に関するよくある質問

Pythonの!=演算子と==演算子の違いは何ですか?

!=演算子は「等しくない」ことを判定し、==演算子は「等しい」ことを判定する比較演算子です。通常の組み込み型(数値・文字列・リストなど)での比較では、両者は逆の結果を返します。

演算子 意味 使用例 結果
!= 等しくない 10 != 20 True
== 等しい 10 == 20 False

条件を反転させたい場面に応じて、どちらの演算子を使うか選択しましょう。なお、カスタムクラスで__eq__や__ne__をオーバーライドした場合、両者の結果が厳密に逆になるとは限らない点には注意が必要です。

浮動小数点数(float)を!=で比較しても大丈夫ですか?

浮動小数点数の!=比較は、内部的な表現誤差によって予期しない結果になる可能性があるため注意が必要です。たとえば、0.1 + 0.2 != 0.3 はTrueを返します。これは計算結果が厳密な0.3ではなく、0.30000000000000004のような値として表現されることがあるためです。

浮動小数点数を比較する場合は、標準ライブラリのmath.isclose()関数を使って許容誤差を指定する方法が推奨されます。

import math

a = 0.1 + 0.2
b = 0.3

print(not math.isclose(a, b))  # False(許容誤差内で等しい)

math.isclose()は、2つの値が許容誤差の範囲内で等しいかを判定する関数です。浮動小数点数の等価・非等価比較を行う場合は、この関数の利用を検討してください。

Python 2の<>演算子はPython 3で使えますか?

Python 2では!=のほかに<>演算子でもノットイコールを表現できましたが、Python 3では<>演算子は削除されており、使用するとSyntaxErrorが発生します。Python 3で「等しくない」を判定する場合は、!=演算子のみを使用してください。

  • Python 2: !=と<>の両方が使用可能
  • Python 3: !=のみ使用可能(<>は削除済み)

現在はPython 3が主流であるため、新しくコードを書く場合は!=演算子を使えば問題ありません。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する