Python中排序方法sort、函数sorted的key参数的作用分析
2023-09-27 14:26:59 时间
从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数,将函数的返回值作为比较的依据。
那么怎么使用这个key参数呢?
有2种办法:
1、使用一个函数,这个函数的操作对象就是要比较的数据元素,返回结果就是某个可以用来比较的Python类型的数据;
2、使用匿名函数lambda,通过简单表达式返回某个可以用来比较的Python类型的数据。
这两种方法本质上是一致的。
我们来看案例。
一、 案例1:使用匿名函数lambda来作为key
- 代码
>>> class Car():
def __init__(self,carname,oilcp100km, price):
self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
def __repr__(self):
return str(self.__dict__)
>>> car1,car2,car3 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('科帕奇',12,23)
>>> cars=[car1,car2,car3]
>>> cars
[{'carname': '爱丽舍', 'oilcp100km': 8, 'price': 10}, {'carname': '凯美瑞', 'oilcp100km': 7, 'price': 27}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}]
>>> cars.sort(key=lambda x:x.price) #根据售价进行排序
>>> cars
[{'carname': '爱丽舍', 'oilcp100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '凯美瑞', 'oilcp100km': 7, 'price': 27}]
>>>
- 执行截屏
- 案例分析
从上面的案例情况来看,使用匿名函数返回实例的price作为排序依据,排序后列表中的元素按照price升序进行了排序。
二、 案例2:使用函数来作为key
- 案例说明:使用上面案例1的类及列表,新增一个函数getPrice来代替lambda,进行降序排序;
- 案例代码:
>>> def getPrice(self):return self.price
>>> cars
[{'carname': '爱丽舍', 'oilcp100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '凯美瑞', 'oilcp100km': 7, 'price': 27}]
>>> cars.sort(key=getPrice,reverse=True) #根据售价进行倒序排序
>>> cars
[{'carname': '凯美瑞', 'oilcp100km': 7, 'price': 27}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '爱丽舍', 'oilcp100km': 8, 'price': 10}]
>>>
- 案例截屏
- 案例分析
可以看到新增的函数正确被使用。
通过上述案例,我们可以看到,排序函数sorted和排序方法sort中使用的key参数,是一个可调用的函数,并返回一个可以排序类型的值,排序时使用该返回值作为排序依据。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
相关文章
- python 模块 chardet下载方法及介绍
- python魔法方法之-Python __repr__()方法:显示属性
- python @property的介绍与使用
- linux Python-安装sasl包的错误
- Python 修改文件内容3种方法(替换文件内容)
- 金三银四,python零基础转行必看,这些python高频面试点你全知道吗?
- 【赶快收藏】15道Python常见面试题及答案!
- Python-OpenCV中不用函数split()的实现图像多通道分离的方法——ndraary对象切片实现
- Selenium+Python系列环境搭建及 元素定位那些事
- Python+ADB实现Android手机QQ自动点赞
- Python中常见的公共方法
- 【Python】+类内部方法相互调用
- 几种归一化方法的概念及python实现
- 《Python数据科学指南》——2.3 使用matplotlib进行绘画
- 《Python编程快速上手——让繁琐工作自动化》——2.4 混合布尔和比较操作符
- 《Python面向对象编程指南》——2.4 __bool__()方法
- Python零基础入门学习方法有哪些呢?
- python 子类继承父类属性及实例化方法
- python list append方法
- Python——在for循环中更改list值的方法
- 9、链表——从尾到头打印链表(python版)
- Python学习---内置函数的学习
- python pandas自定义函数之apply函数用法
- python:列表推导式
- python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法
- Python蓝桥杯训练:数组和字符串 Ⅴ
- Python每日一学 08——get()方法学习
- Python 数组保存到文件
- python常用魔术方法 (repr str call)
- python os.remove()方法
- python中os模块的常用方法