«Не равно» в Python пишется как !=: восклицательный знак и знак равенства подряд, без пробела. Выражение 5 != 3 вернёт True, а 5 != 5 вернёт False. Знак ≠ и старый оператор <> в Python 3 не работают, интерпретатор остановится на SyntaxError.
Для проверки на None вместо != берут is not. Остальные знаки сведены в таблицу в статье об операторах 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 "пусто".
Чем != отличается от 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.
Частые ошибки с !=
| Что видите | Причина | Что делать |
|---|---|---|
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-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 122 226 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




