Подтвердить что ты не робот

Пользовательская сортировка списка Python

Я пересматривал старый код и сталкивался с этим:

alist.sort(cmp_items)

def cmp_items(a, b):
    if a.foo > b.foo:
        return 1
    elif a.foo == b.foo:
        return 0
    else:
        return -1

Работает код (и я написал его около 3 лет назад!), но я не могу найти эту вещь в любом месте документа Python, и каждый использует sorted() для реализации пользовательской сортировки. Может кто-нибудь объяснить, почему это работает?

4b9b3361

Ответ 1

Здесь описано .

Метод sort() принимает необязательные аргументы для управления сравнения.

cmp задает пользовательскую функцию сравнения из двух аргументов (список пункты), которые должны возвращать отрицательное, ноль или положительное число в зависимости от того, считается ли первый аргумент меньшим, равный или больше второго аргумента: cmp = lambda x, y: cmp (x.lower(), y.lower()). Значение по умолчанию: None.

Ответ 2

В качестве побочного примечания, здесь есть лучшая альтернатива для реализации той же сортировки:

alist.sort(key=lambda x: x.foo)

Или, альтернативно:

import operator
alist.sort(key=operator.attrgetter('foo'))

Посмотрите Сортировка How To, это очень полезно.

Ответ 3

Как и в этом примере. Вы хотите отсортировать этот список.

[('c', 2), ('b', 2), ('a', 3)]

выход:

[('a', 3), ('b', 2), ('c', 2)]

вы должны отсортировать два элемента и первый

def letter_cmp(a, b):
    if a[1] > b[1]:
        return -1
    elif a[1] == b[1]:
        if a[0] > b[0]:
            return 1
        else:
            return -1
    else:
        return 1

Наконец:

just sort(letter_cmp)