Questo è uno dei rari casi in cui un comparatore è molto più pulito di una funzione chiave. Avevo in realtà solo reimplementare cmp
:
try:
cmp
except NameError:
def cmp(x, y):
if x < y:
return -1
elif x > y:
return 1
else:
return 0
e quindi utilizzare functools.cmp_to_key
per convertire il comparatore per un Python 3 stile tasto funzione:
nums.sort(key=functools.cmp_to_key(lambda x, y: cmp(y+x, x+y)))
Per chiunque chiedendo cosa realmente fa questo strano tipo, si trova l'ordine in cui concatenare le stringhe di input per produrre la stringa di output lessicograficamente più grande. Quando tutte le stringhe sono sequenze di cifre, l'output ha il valore numerico più alto possibile.
@Pythonista: non si sta ordinando in ordine inverso. È molto più sottile di quello, e convertire il comparatore in una funzione chiave è in realtà piuttosto complicato. – user2357112
https://docs.python.org/3.5/library/functools.html#functools.cmp_to_key –
Puoi fornire dati di test che non riescono con 'sort (reverse = True)'? –