Вы вряд ли сможете написать значащую key функцию в Python 3 для этого типа сортировки, не прибегая к функции компаратора и затем используя functools.comp_to_key
дляпревратите его в ключевую функцию.
Проверьте, какой из элементов больше, до их минимальной длины (используя zip
для итерации на обоих остановках на минимальной длине), если оба одинаковы, проверьте их длину:
from functools import cmp_to_key
def comparator(x, y):
if x == y: return 0
for i, j in zip(x, y):
if i != j:
return int(j)-int(i) # the reversal is done here
return 1 if len(x) > len(y) else -1
t = '9989', '989', '9'
print(sorted(t, key=cmp_to_key(comparator)))
# ['9', '9989', '989']
t = '888', '9989', '989', '9', '8'
print(sorted(t, key=cmp_to_key(comparator)))
# ['9', '9989', '989', '8', '888']
Функция сортировки вполне читабельна, не обрабатывается дальше, когда элементы равны, и с zip
останавливается на минимальной длине; Адаптивный .