Хотя Йохен Ритцель сказал, что вам не нужен cmp, на самом деле это отличный вариант использования! Используя cmp, вы можете сортировать по длине, а затем по алфавиту в два раза быстрее, чем в два раза быстрее!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Пример:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Обратите внимание, если ваш список представляет собой сочетание верхнего и нижнего регистра, замените cmp(a, b)
на cmp(a.lower(), b.lower())
, так как python сортирует 'a'> 'Z' .
В python3 вам нужно будет сортировать объекты с определенными функциями сравнения стиля __lt__
или functools.cmp_to_key()
, который сделает это за вас.