Сортировка Python с недостатками «ключевой» функции - PullRequest
3 голосов
/ 19 октября 2011

С одной стороны, легко увидеть данную ключевую функцию, можно легко реализовать сортировку, которая делает то же самое, используя функцию сравнения.Сокращение выглядит следующим образом:

def compare(x,y):
    return key(x) - key(y)

С другой стороны, как мы можем точно знать, что мы не теряем потенциальную сортировку, ограничивая все виды сортировки картой элементов с использованием ключа?Например, предположим, что я хочу отсортировать список кортежей длиной 2 (x, y), где я настаиваю на следующем методе сравнения:

def compare(tup1,tup2):
    if (tup1[1] < tup2[0]):
       return -1
    if (tup1[0] % 2 == 0):
       return 1
    if (tup1[0] - tup2[1] < 4):
       return 0
    else:
       return 1

Теперь скажите мне, как мне перевести это сравнение в соответствующий "ключ""Функция такова, что мой алгоритм сортировки происходит так же?Это не надуманный пример, так как эти виды настраиваемой сортировки обнаруживаются в алгоритмах нарушения симметрии во время поиска, и это очень важно.

1 Ответ

6 голосов
/ 19 октября 2011

Используйте functools.cmp_to_key, это гарантирует такое же поведение сортировки, как и ваша функция сравнения. Источник этой функции можно найти в документе Как сортировать в Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...