how to sort by length of string followed by alphabetical order?
我目前是python的新手,并且陷入了这个问题,似乎找不到正确的答案。
问题:给出一个单词列表,按长度顺序(最长到最短)返回相同单词的列表,第二个排序标准应按字母顺序。 提示:您需要考虑两个功能。
这是我到目前为止的内容:
1 2 3 4 5 6 | def bylength(word1,word2): return len(word2)-len(word1) def sortlist(a): a.sort(cmp=bylength) return a |
它按长度排序,但是我不知道如何将第二个条件应用于这种排序,即按字母顺序降序排列。
您可以按照以下两个步骤进行操作:
1 2 | the_list.sort() # sorts normally by alphabetical order the_list.sort(key=len, reverse=True) # sorts by descending length |
Python的排序是稳定的,这意味着当长度相等时,按长度对列表进行排序会使元素按字母顺序排列。
您也可以这样:
1 | the_list.sort(key=lambda item: (-len(item), item)) |
通常,您不需要
1 2 3 4 | n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy'] for i in reversed(sorted(n, key=len)): print i |
yyyyy dddl dddd ccc bbb aaa
1 2 | for i in sorted(n, key=len, reverse=True): print i |
yyyyy dddd dddl aaa bbb ccc
1 2 3 4 5 6 7 8 9 10 11 12 13 | -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'] |
尽管Jochen Ritzel表示您不需要cmp,但这实际上是一个很好的用例! 使用cmp,您可以按长度排序,然后按字母顺序在一半的时间内进行两次排序!
1 2 3 4 5 6 7 | def cmp_func(a, b): # sort by length and then alphabetically in lowercase if len(a) == len(b): return cmp(a, b) return cmp(len(a), len(b)) sorted_the_way_you_want = sorted(the_list, cmp=cmp_func) |
例:
1 2 3 | >>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D'] >>> sorted(the_list, cmp=cmp_func) ['A', 'B', 'C', 'D', 'Z', 'AA', 'BB'] |
请注意,如果您的列表是大小写混合使用,则将
在python3中,您需要使用定义的