Как сортировать по длине строки, за которой следует алфавитный порядок?
В настоящее время я новичок в python и застрял в этом вопросе, похоже, не могу найти правильный ответ.
question: Учитывая список слов, верните список с теми же словами в порядке длины (от самого длинного до кратчайшего), второй критерий сортировки должен быть в алфавитном порядке. Подсказка: вам нужно подумать о двух функциях.
Это то, что у меня есть до сих пор:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
он сортируется по длине, но я не знаю, как применить второй критерий к этому типу, который по алфавиту нисходит.
Ответы
Ответ 1
Вы можете сделать это в два этапа:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Сорт Python стабилен, что означает, что сортировка списка по длине оставляет элементы в алфавитном порядке, когда длина равна.
Вы также можете сделать это следующим образом:
the_list.sort(key=lambda item: (-len(item), item))
Как правило, вам никогда не нужно cmp
, оно даже было удалено в Python3. key
гораздо проще в использовании.
Ответ 2
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
Ответ 3
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']