自定义排序
排序函数
sort()函数:
list.sort(key=None, reverse=False)
sorted()函数: 与sort()类似,区别就是有返回值
key接受的某一个函数返回值或者元素值,表示此元素的权值,sort将按照权值大小进行排序
key常常与lambda结合使用,可以实现自定义排序
举例
这个是我在leetcode官方解题代码中学习到的
["a", "banana", "app", "appl", "ap", "apply", "apple"]
要求:按照长度递增,长度相同时按照字典序降序
words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]
words.sort(key=lambda x: (-len(x), x), reverse=True)
说明:
-
先按照-len(x)排序,即长度倒序
结果为
['banana', 'apply', 'apple', 'appl', 'app', 'ap', 'a']
-
在按照 x排序,即按照字典序排序,是在第一步的基础进行升序,即字符串长度相同时升序
结果为
['banana', 'apple', 'apply', 'appl', 'app', 'ap', 'a']
-
最后使结果翻转
结果为
['a', 'ap', 'app', 'appl', 'apply', 'apple', 'banana']
个人理解:
我们要实现长度递增,长度相同时按照字典序降序,在满足两个要求时,字典升序好实现(因为字典序要求是在长度排序的基础上实现的,只需要按照元素排序就可以实现了),但是我们要的是长度相同时小区间的字典序降序,所以我们要进行reverse= True翻转,进而开始我们应该按照长度的倒序排列
推荐学习:937. 重新排列日志文件