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

Как сортировать по длине строки, за которой следует алфавитный порядок?

В настоящее время я новичок в python и застрял в этом вопросе, похоже, не могу найти правильный ответ.

question: Учитывая список слов, верните список с теми же словами в порядке длины (от самого длинного до кратчайшего), второй критерий сортировки должен быть в алфавитном порядке. Подсказка: вам нужно подумать о двух функциях.

Это то, что у меня есть до сих пор:

def bylength(word1,word2):
    return len(word2)-len(word1)

def sortlist(a):
    a.sort(cmp=bylength)
    return a

он сортируется по длине, но я не знаю, как применить второй критерий к этому типу, который по алфавиту нисходит.

4b9b3361

Ответ 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']