Не равно в Python: оператор !=, is not и частые ошибки

В Python «не равно» записывается как != без пробела, а знаки ≠ и дают SyntaxError. Разбираем, когда вместо != нужен is not, почему 0.1 + 0.2 != 0.3 возвращает True и как не попасть в ловушку x != 1 or x != 2. В конце таблица частых ошибок с готовыми исправлениями.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3139 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3793 экспертных мнения Подписаться на Телеграм-канал
Обложка: Не равно в Python: оператор !=, is not и частые ошибки

«Не равно» в Python пишется как !=: восклицательный знак и знак равенства подряд, без пробела. Выражение 5 != 3 вернёт True, а 5 != 5 вернёт False. Знак ≠ и старый оператор <> в Python 3 не работают, интерпретатор остановится на SyntaxError.

Для проверки на None вместо != берут is not. Остальные знаки сведены в таблицу в статье об операторах Python. Ниже про неравенство и про ошибки, из-за которых чаще всего ломаются условия.

CheckroiCheckroiПодборка курсов по Python569 курсов • 52 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как написать «не равно» в Python

Рой пишет условие на Python за ноутбуком

На клавиатуре это два символа: Shift + 1 в английской раскладке даёт !, сразу за ним ставите =. Пробел между ними ломает оператор.

print(5 != 3)
print(5 != 5)
print(not (5 == 3))
True
False
True

Третья строка показывает запасной вариант: not (a == b) означает то же самое, но читается хуже. Им пользуются редко, обычно когда условие уже собрано из нескольких частей.

Привычки из математики и других языков в Python не проходят. Вот что ответил интерпретатор Python 3.14 на каждую попытку внутри if x … 3::

Как написали Откуда привычка Что ответил Python
x ≠ 3 математика SyntaxError: invalid character '≠' (U+2260)
x <> 3 Python 2, SQL, Pascal SyntaxError: invalid syntax
x !== 3 JavaScript, PHP SyntaxError: invalid syntax
x =! 3 опечатка SyntaxError: invalid syntax
x ! = 3 лишний пробел SyntaxError: invalid syntax

Оператор <> убрали при переходе на третью версию, в списке изменений What’s New in Python 3.0 так и сказано: «Removed <> (use != instead)». Вернуть его можно только шуткой разработчиков из PEP 401, строкой from __future__ import barry_as_FLUFL. В рабочем коде так не делают. Остальные правила записи выражений собраны в материале о синтаксисе Python.

Где пригодится !=

Чаще всего неравенство стоит в условии if и в цикле while, который крутится, пока пользователь не введёт нужное слово:

answer = ""
while answer != "выход":
    answer = input("Команда: ")

Второй частый случай: отфильтровать список и выбросить ненужные значения.

numbers = [3, 0, 7, 0, 5]
print([n for n in numbers if n != 0])
[3, 7, 5]

Про сами циклы подробно написано в статьях о цикле while и о break и continue. Если условие нужно уместить в одну строку, пригодится тернарный оператор: status = "есть" if count != 0 else "пусто".

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Чем != отличается от is not

Две одинаковые кружки на столе как пример равных значений

Эти два оператора путают постоянно, хотя проверяют разное:

  • a != b спрашивает, разные ли значения;
  • a is not b спрашивает, разные ли это объекты в памяти.
a = [1, 2]
b = [1, 2]
print(a != b, a is not b)
False True

Списки одинаковые по содержимому, поэтому != даёт False. Но это два отдельных объекта, и is not отвечает True.

Для None правило записано в стандарте оформления кода PEP 8:

Comparisons to singletons like None should always be done with is or is not, never the equality operators.

Поэтому пишут if result is not None:, а не if result != None:. Для чисел и строк наоборот, только !=: is not сравнит объекты, а не значения, и результат будет зависеть от того, как интерпретатор хранит данные.

Как != сравнивает разные типы

Отсюда берётся большинство странных результатов. Ниже то, что выдал Python 3.14 на каждую строку.

Числа и строки

print(1 != "1")
print(1 != 1.0)
print(True != 1)
True
False
False

Число и строка всегда разные, даже если выглядят одинаково. На этом ломаются программы с вводом: input() возвращает строку, и input() != 5 будет True при любом ответе. Сначала превратите ввод в число, как в разборе int(input()), и только потом сравнивайте.

Целое 1 и дробное 1.0 Python считает равными, как и True с единицей.

Дробные числа

import math
print(0.1 + 0.2 != 0.3)
print(not math.isclose(0.1 + 0.2, 0.3))
True
False

Сумма 0.1 + 0.2 хранится с крошечной погрешностью и не совпадает с 0.3 до последнего бита. Дробные числа сравнивайте через math.isclose(): по умолчанию функция считает числа равными при относительной разнице до 1e-09.

Отдельный случай: значение nan, «не число». Оно не равно даже самому себе: float("nan") != float("nan") возвращает True. В справочнике языка об этом сказано прямо: «x != x is true». Проверять такое значение нужно функцией math.isnan().

Строки и регистр

print("Да" != "да")
print("Да".casefold() != "да".casefold())
True
False

Строки сравниваются посимвольно, и заглавная буква для Python другой символ. Если регистр не важен, приведите обе строки к одному виду методом casefold() или lower(). Остальные полезные методы собраны в шпаргалке по методам строк.

Списки, словари и множества

print([1, 2] != [2, 1])
print({"a": 1, "b": 2} != {"b": 2, "a": 1})
print({1, 2} != {2, 1})
True
False
False
Тип Важен ли порядок Когда != даёт True
список, кортеж да отличается хотя бы один элемент или его позиция
словарь нет отличается набор пар «ключ — значение»
множество нет отличается набор элементов

Подробнее про каждую структуру написано в статьях о списках и о множествах.

Как проверить, что значение не равно нескольким вариантам

Рой довольно раскладывает карточки по корзинам

Классическая ловушка выглядит так: нужно убедиться, что x не равен ни 1, ни 2, и рука пишет or.

x = 3
print(x != 1 or x != 2)
print(x not in (1, 2))
True
True

При x = 3 обе строки дают True, и ошибка не видна. Подставьте x = 1: первая строка всё равно вернёт True, потому что 1 не равно 2. Условие с or истинно при любом x.

Решение: x != 1 and x != 2 или короче, через not in. Вторая запись читается почти как фраза и не ломается, когда вариантов становится пять.

Вторая ловушка: цепочка a != b != c. На вид она проверяет, что все три значения разные. На деле проверяет другое:

print(1 != 2 != 1)
True

В справочнике языка про цепочки сравнений сказано, что запись a op1 b op2 c «doesn’t imply any kind of comparison between a and c». Python сравнил 1 с 2 и 2 с 1, а первое и третье значение не сравнивал вовсе. Чтобы проверить, что все значения разные, используйте len({a, b, c}) == 3.

Как работает != в своих классах

Объекты собственного класса по умолчанию сравниваются по тому, один ли это объект. Содержимое Python не смотрит:

class Box:
    def __init__(self, v):
        self.v = v

print(Box(1) != Box(1))
True

Чтобы сравнение шло по данным, опишите метод __eq__. Отдельно писать __ne__ не нужно: по документации модели данных, «by default it delegates to __eq__() and inverts the result».

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __eq__(self, other):
        return (self.x, self.y) == (other.x, other.y)

print(Point(1, 2) != Point(1, 2))
print(Point(1, 2) != Point(3, 4))
False
True

Как устроены классы и методы с двойным подчёркиванием, мы разбирали в статье про ООП на Python.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки с !=

Что видите Причина Что делать
SyntaxError на строке с неравенством написали ≠, <>, !== или поставили пробел только != слитно
условие срабатывает всегда x != 1 or x != 2 x not in (1, 2)
input() != 5 всегда True сравниваете строку с числом int(input()) != 5
0.1 + 0.2 != 0.3 даёт True погрешность дробных чисел not math.isclose(a, b)
«Да» не совпадает с «да» регистр a.casefold() != b.casefold()
линтер ругается на != None правило PEP 8 is not None
одинаковые объекты класса «не равны» нет метода __eq__ описать __eq__

Закрепить оператор лучше на практике: в подборке задач по Python для начинающих условия с неравенством встречаются почти в каждом блоке.

Где освоить Python системно

Оператор != запоминается за минуту. Писать условия, которые не ломаются на вводе пользователя и дробных числах, учатся на задачах с проверкой и разбором ошибок. Курсы ниже собраны из нашего каталога курсов по Python, в карточках видно цену, длительность и формат обучения.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox122 226 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽3890 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Как написать «не равно» в питоне?

Двумя символами подряд: !=. Например, if x != 0: выполнит блок, когда x не ноль. Знак ≠ и пробел между ! и = вызывают SyntaxError.

Почему в Python 3 не работает <>?

Оператор <> был в Python 2 и удалён в Python 3.0, единственная запись неравенства теперь !=. На 5 <> 3 интерпретатор отвечает SyntaxError: invalid syntax.

Что выбрать для проверки на None: != или is not?

is not: if value is not None:. Так советует стандарт оформления PEP 8, и линтеры подсвечивают != None как замечание.

Как проверить, что переменная не равна нескольким значениям?

Через not in: if x not in (1, 2, 3):. Запись x != 1 or x != 2 истинна при любом x, это частая ошибка в условиях.

Почему 0.1 + 0.2 != 0.3 возвращает True?

Дробные числа хранятся с небольшой погрешностью, и сумма 0.1 + 0.2 чуть отличается от 0.3. Для таких сравнений используйте math.isclose(a, b).

Чем != отличается от not in?

!= сравнивает два значения между собой, а not in проверяет, что элемента нет в списке, строке или множестве: "я" not in "мама" вернёт True.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!