Компаратор на Python
Что если для решения задачи необходимо сравнивать числа по каким-то особым правилам? В этом случае в Python можно определить пользовательскую функцию сравнения, также известную как компаратор. Для этого параметру key
присвоим встроенную функцию cmp_to_key
из модуля functools
, а в качестве параметра передадим название нашей созданной функции сравнения.
Принцип работы пользовательского компаратора
При создании пользовательского компаратора он, как правило, должен возвращать целое значение, которое следует следующей схеме:
- возвращать отрицательное значение (
< 0
), когда левый элемент должен располагаться перед правым элементом
- возвращать положительное значение (
> 0
), когда левый элемент должен располагаться после правого элемента
- возвращать
0
, когда и левый, и правый элемент имеют одинаковый вес и должны быть отсортированы "одинаково" без старшинства (в этом случае можно написать дополнительную логику на сортировку при равенстве значений, если такая нужна)
Пример, демонстрирующий, как написать пользовательскую функцию сравнения для сортировки списка чисел в порядке убывания:
from functools import cmp_to_key
def compare_numbers(a, b):
if a < b:
return 1
elif a > b:
return -1
else:
return 0
numbers = [5, 2, 8, 1, 9]
numbers.sort(key=cmp_to_key(compare_numbers))
print(numbers) # Вывод: [9, 8, 5, 2, 1]
Компараторы используются для описания сложных правил сортировки.