如何按字符串的长度排序,然后按字母顺序排序?

Adr*_*ian 59 python sorting

我现在是python的新手并且遇到了这个问题,似乎找不到合适的答案.

问题:给定一个单词列表,按照长度(最长到最短)的顺序返回一个具有相同单词的列表,第二个排序标准应该是按字母顺序排列的.提示:你需要考虑两个功能.

这是我到目前为止:

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

def sortlist(a):
    a.sort(cmp=bylength)
    return a
Run Code Online (Sandbox Code Playgroud)

它按长度排序,但我不知道如何将第二个标准应用于此类,即按字母顺序降序.

Joc*_*zel 126

您可以通过以下两个步骤执行此操作:

the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Run Code Online (Sandbox Code Playgroud)

Python的排序是稳定的,这意味着按长度排序列表会在长度相等时按字母顺序排列元素.

你也可以这样做:

the_list.sort(key=lambda item: (-len(item), item))
Run Code Online (Sandbox Code Playgroud)

通常你永远不需要cmp,甚至在Python3中删除它.key更容易使用.

  • lambda解决方案令人敬畏! (4认同)

Ari*_*ury 5

n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']

for i in reversed(sorted(n, key=len)):
    print i
Run Code Online (Sandbox Code Playgroud)

yyyyy dddl dddd ccc bbb aaa

for i in sorted(n, key=len, reverse=True):
     print i
Run Code Online (Sandbox Code Playgroud)

yyyyy dddd dddl aaa bbb ccc