Сравнение значений в Python: операторы и их применение

Раздел: Основы Python -> Основы языка

Операторы сравнения в Python: соответствие математическим знакам

Операторы сравнения (==, !=, <, >, <=, >=) используются для проверки отношений между значениями. Результатом всегда является логический тип bool - True или False. Эти операторы полностью соответствуют математическим знакам равенства, неравенства, строгого и нестрогого сравнения.

Основной способ: прямое применение операторов

Самый простой и эффективный вариант - использовать оператор прямо в условии или присвоить результат переменной.

a = 10
b = 5
print(a == b)  # False
print(a != b)  # True
print(a < b)   # False
print(a > b)   # True
print(a <= b)  # False
print(a >= b)  # True

операторы сравнения в python к математическим знакам (операторы сравнения в python)

False
True
False
True
False
True

Python присвоить (присвоение в python)

Вариант 1: Проверка равенства чисел с плавающей точкой

Как корректно сравнить два числа float на равенство?

Из-за ошибок округления прямое сравнение == может дать неожиданный результат. Рекомендуется проверять, находится ли разница в пределах допустимой погрешности (epsilon).

x = 0.1 + 0.2
y = 0.3
epsilon = 1e-9
print(x == y)                    # False
print(abs(x - y) < epsilon)      # True

Python hello py (программа hello world на python)

False
True

какие имена являются правильными в python (правильные имена переменных в python)

Типичная ошибка:

Сравнение float через == без учёта погрешности. Решение: использовать math.isclose() или задать epsilon.

Вариант 2: Сравнение строк без учёта регистра

Как проверить равенство строк, игнорируя заглавные буквы?

Python различает регистр. Чтобы сравнить строки без учёта регистра, следует привести обе к одному регистру (обычно к нижнему).

s1 = 'Hello'
s2 = 'hello'
print(s1 == s2)           # False
print(s1.lower() == s2.lower())  # True
False
True

Проблема:

Забыть про регистр - частая причина багов при обработке пользовательского ввода.

Вариант 3: Проверка вхождения в диапазон (цепочки сравнений)

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

Python позволяет записывать цепочки сравнений, например a < b < c, что эквивалентно a < b and b < c. Это удобно и читаемо.

x = 15
print(10 < x < 20)   # True
print(10 < x <= 15)  # True (включает 15)
True
True

Ошибка:

Начинающие пишут 10 < x and < 20 - синтаксическая ошибка. Нужно использовать цепочки или полное выражение с and.

Вариант 4: Сравнение разных типов

Можно ли сравнивать число и строку?

В Python 3 сравнение объектов разных типов (например, int и str) вызывает TypeError, за исключением числовых типов (int, float, complex) между собой.

print(5 > '3')       # TypeError: '>' not supported between instances of 'int' and 'str'
TypeError: '>' not supported between instances of 'int' and 'str'

Решение:

Перед сравнением привести операнды к одному типу.

Вариант 5: Сравнение с None

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

Для проверки на None рекомендуется использовать is и is not, а не ==, так как == может быть перегружен и дать неверный результат для кастомных классов.

value = None
print(value == None)   # True, но не рекомендуется
print(value is None)   # True (правильный способ)
True
True

Распространённая ошибка:

Использовать == None вместо is None. В большинстве случаев работает, но считается плохой практикой.

Расширенные примеры использования операторов сравнения

1. Сравнение списков и кортежей

Сравнение последовательностей происходит лексикографически: сначала сравниваются первые элементы, если они равны - вторые и так далее.

Пример
print([1, 2, 3] == [1, 2, 3])   # True
print([1, 2, 3] < [1, 2, 4])   # True (3 < 4)
print([1, 2] < [1, 2, 3])     # True (меньшая длина считается меньшей)
print([1, 3] > [1, 2, 5])     # True (3 > 2)
True
True
True
True

2. Сравнение строк (лексикографическое)

Строки сравниваются по кодам Unicode символов.

Пример
print('apple' < 'banana')      # True (a < b)
print('Python' > 'python')    # False, т.к. 'P' (80) < 'p' (112)
print('abc' == 'abc')         # True
True
False
True

3. Цепочки сравнений

Можно комбинировать несколько сравнений в одном выражении.

Пример
x = 25
print(10 < x < 30)           # True
print(10 < x < 20)           # False
print(10 < x < 30 != 40)     # True (истинны все части)
True
False
True

4. Сравнение с помощью in и not in

Хотя это не операторы сравнения, они часто используются в условиях для проверки принадлежности.

Пример
nums = [1, 2, 3]
print(2 in nums)        # True
print(5 not in nums)    # True
True
True

5. Сравнение пользовательских объектов

Можно переопределить методы __eq__, __lt__ и другие для кастомных классов.

Пример
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y
    def __lt__(self, other):
        return (self.x, self.y) < (other.x, other.y)

p1 = Point(1, 2)
p2 = Point(1, 2)
p3 = Point(2, 1)
print(p1 == p2)   # True
print(p1 < p3)    # True
True
True

6. Опасность сравнения с is для изменяемых объектов

is проверяет идентичность, а не равенство. Для одинаковых по содержанию списков is даст False.

Пример
a = [1, 2]
b = [1, 2]
print(a == b)   # True
print(a is b)   # False
True
False

7. Сравнение чисел разных типов

int и float сравниваются корректно, complex поддерживает только == и !=.

Пример
print(5 == 5.0)       # True
print(5 < 5.1)        # True
print(3+4j == 3+4j)   # True
# print(3+4j < 2+5j) # TypeError
True
True
True

8. Использование not для инвертирования

Унарный оператор not превращает True в False и наоборот.

Пример
flag = False
print(not flag)                          # True
print(not (10 > 5))                     # False
print(not (10 < 5))                     # True
True
False
True

9. Сравнение с None и is not

Правильный способ проверить, что переменная не равна None.

Пример
val = 0
if val is not None:
    print('val не None')   # выводится
else:
    print('val is None')
val не None

Операторы сравнения в Python - comments

En
операторы сравнения в python к математическим знакам (python)