详解Python列表(list)的方法sort()的第一个参数key简单清晰明了的讲解
Posted 昊虹图像算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Python列表(list)的方法sort()的第一个参数key简单清晰明了的讲解相关的知识,希望对你有一定的参考价值。
Python列表(list)的方法sort()的语法如下:
list.sort( key=None, reverse=False)
两个参数都是可选的,第二个参数不用讲了,很简单,就是控制是按升序还是降序排。
这篇文章主要讲第一个参数key的作用。
那么参数key的作用是什么呢?
总的来说,我们可以利用它实现按我们想要的标准进行排序,即我们可以自定义排序的标准,或者称为自定义排序的方式。
参数key是某个函数的返回值,这个函数的输入参数只有一个,那就是我们要待排序的列表的每一个元素(相当于待排序列表中有多少个元素就执行多少次这个函数),这个函数的返回值作为我们对列表元素进行排序的依据。
上面这句话不太好理解,没头系,看几个实例就知道。
先看对嵌套列表(二维列表)的默认排序。
list1 = [[1, 7], [1, 5], [2, 4], [1, 1]]
list1.sort()
运行结果如下:
从运行结果我们可以看出,默认的排序方式是先按每个列表型元素的第0个元素进行排序,再按每个列表型元素的第1个元素进行排序的。
如果我们想让排序方式按每一个列表型元素的第1个元素进行排序,怎么办呢?
按下面这样写就行了。
def sort_fun(x1):
return x1[1]
list1 = [[1, 7], [1, 5], [2, 4], [1, 1]]
list1.sort(key=sort_fun)
运行结果如下:
我们看到,上面的结果正是按每一个列表型元素的第1个元素进行排序的。
怎么实现的呢?
sort()方法在执行后,会将list1中四个列表型元素[1, 7]、[1, 5]、 [2, 4]、[1, 1]依次作为函数sort_fun的输入参数,并依次得到四个返回值,四个返回值为各自索引为1的元素值,即7、5、4、1这四个值,这四个值按升序排序后为1、4、5、7,所以四个列表型元素[1, 7]、[1, 5]、 [2, 4]、[1, 1]就被排序为了[1, 1]、[2, 4]、[1, 5]、 [1, 7]。
我们可以利用匿名函数lambda来简化上面的写法。
关于匿名函数lambda的介绍可以参见下面这篇文章:
https://zhuanlan.zhihu.com/p/58579207
利用匿名函数lambda来简化上面的代码:
list1 = [[1, 7], [1, 5], [2, 4], [1, 1]]
list1.sort(key=lambda x1: x1[1])
运行结果和上面的运行结果一样:
再举一个例子,我们要对列表中的字符串按长度进行排序,那么可以像下面这样写:
list1 = ['baidu', 'CSDN', 'QQ', 'Google', 'suwenhao']
list1.sort(key=lambda x1: len(x1))
运行结果如下:
怎么样实现的呢?
sort()方法在执行后,会将五个字符串元素’baidu’, ‘CSDN’, ‘QQ’, ‘Google’, 'suwenhao’分别代入匿名函数中作为输入参数,并依次求得它们的长度为5、4、2、6、8,按长度升序排的话就是2、4、5、6、8,这样原序列就被排序为了:[‘QQ’, ‘CSDN’, ‘baidu’, ‘Google’, ‘suwenhao’]
从上面的示例我们可以看出,方法sort()的第一个参数key调用的函数输入参数只有一个,即只能为待排序的列表的每一个元素,如果我们想有更多的参数实现更强的排序功能,怎么办呢?可以参考我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/125407158
以上是关于详解Python列表(list)的方法sort()的第一个参数key简单清晰明了的讲解的主要内容,如果未能解决你的问题,请参考以下文章