Python中排序方法sort、函数sorted的key参数的作用分析
从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中排序方法sort、函数sorted的key参数的作用分析的更多相关文章
- python 列表排序方法sort、sorted技巧篇
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...
- Python 的排序方法 sort 和 sorted 的区别
使用 sort() 或内建函数 sorted() 对列表进行排序.它们之间的区别有两点: sort() 方法是对原列表进行操作,而 sorted() 方法会返回一个新列表,不是在原来的基础上进行操作. ...
- Python中的排序方法sort(),sorted(),argsort()等
python 列表排序方法sort.sorted技巧篇 转自https://www.cnblogs.com/whaben/p/6495702.html,学习参考. Python list内置sort( ...
- js中排序方法sort() 和 reverse()
reverse() 作用:反转原数组. 用法: array.reverse(); 图解: sort() 作用:对原数组进行排序.默认将每个数组项 先 转换为字符串 再 进行字符串对比后升序排序. 用法 ...
- Python中__new__方法为什么有人说是构造方法?有什么作用?
__new__方法是Python新式类引入的,通常用于控制生成一个新实例的过程.它是类级别的静态方法,是在创建实例对象前执行,如果自定义类中没有重写该方法,则Python自动调用父类的方法,当所有父类 ...
- python中,*args和**kwargs这两个参数的作用是什么?
*args和**kwargs这两个都是不定长参数,可以解决函数中参数不固定的问题,*args可以把位置参数转化成元组,**kwagrs可以把关键字参数转化成字段
- Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能
Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数.相应地从Python ...
- 【转】python中List的sort方法(或者sorted内建函数)的用法
原始出处:http://gaopenghigh.iteye.com/blog/1483864 python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. ...
- Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
随机推荐
- day83:luffy:添加购物车&导航栏购物车数字显示&购物车页面展示
目录 1.添加购物车+验证登录状态 2.右上方购物车图标的小红圆圈数字 3.Vuex 4.购物车页面展示-后端接口 5.购物车页面展示-前端 6.解决一个购物车数量显示混乱的bug 1.添加购物车+验 ...
- 一个名为不安全的类Unsafe
最近为了更加深入了解NIO的实现原理,学习NIO的源码时,遇到了一个问题.即在WindowsSelectorImpl中的 pollWrapper属性,当我点进去查看它的PollArrayWrapper ...
- 记elementUI一个大坑
1. 表格中 用v-if 切换不同表字段时 表头字段顺序经常互换 解决方法:在table-column中加入:key="Math.random()"2. v-if控制的el-t ...
- MSSQL sql numeric转字符串显示不补0
由于工作中需要把numeric转字符串显示,但是有一个问题会自动补0. DECLARE @f NUMERIC(18,4)=1.1200, @str VARCHAR(50) SELECT CAST(@f ...
- powershell渗透-信息收集命令
powershell渗透-信息收集命令 本文包含从 Internet 的各个角落收集的 PowerShell 命令列表,这些命令在渗透测试或红色团队练习期间可能会有所帮助. 该列表包括各种开发后的单行 ...
- orphan sockets
orphan sockets 介绍一下什么是 orphan sockets,简单来说就是该 socket 不与任何一个文件描述符相关联.例如,当应用调用 close() 关闭一个链接时,此时该 soc ...
- const常量与define宏定义的区别(转)
#define RADIUS 100; const float RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...
- linux 命令之file
Linux file命令用于辨识文件类型. 通过file指令,我们得以辨识该文件的类型. 语法 file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...] ...
- java实现 阿拉伯数字转换为汉字数字(转载)
public class VedioExtractSpeech { public static void main(String[] args) { System.out.println(" ...
- 查询OSD运行在哪些cpu上
前言 在看CPU相关的文章的时候,想起来之前有文章讨论是否要做CPU绑定,这个有说绑定的也有说不绑定的,然后就想到一个问题,有去观测这些OSD到底运行在哪些CPU上面么,有问题就好解决了,现在就是要查 ...