如何按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']