如何按string的长度sorting,然后按字母顺序sorting?

我目前是新来的python卡住了这个问题,似乎无法find正确的答案。

问题:给出单词列表,按照长度(从最长到最短)的顺序返回一个相同单词的列表,第二个sorting标准应该是按字母顺序的。 提示:你需要考虑两个function。

这是我迄今为止:

def bylength(word1,word2): return len(word2)-len(word1) def sortlist(a): a.sort(cmp=bylength) return a 

它按长度sorting,但我不知道如何将第二个标准应用于这种按字母顺序递减的sorting。

你可以这样做两个步骤:

 the_list.sort() # sorts normally by alphabetical order the_list.sort(key=len, reverse=True) # sorts by descending length 

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

你也可以这样做:

 the_list.sort(key=lambda item: (-len(item), item)) 

一般来说,你永远不需要cmp ,它甚至在Python3中被删除。 key更容易使用。

 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

 -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']