详解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

  • 21
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值