• Python中排序方法sort、函数sorted的key参数的作用分析


    从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数,将函数的返回值作为比较的依据。
    那么怎么使用这个key参数呢?
    有2种办法:
    1、使用一个函数,这个函数的操作对象就是要比较的数据元素,返回结果就是某个可以用来比较的Python类型的数据;
    2、使用匿名函数lambda,通过简单表达式返回某个可以用来比较的Python类型的数据。
    这两种方法本质上是一致的。
    我们来看案例。
    一、 案例1:使用匿名函数lambda来作为key

    1. 代码
    >>> 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}]
    >>>
    
    1. 执行截屏
      在这里插入图片描述
    2. 案例分析
      从上面的案例情况来看,使用匿名函数返回实例的price作为排序依据,排序后列表中的元素按照price升序进行了排序。

    二、 案例2:使用函数来作为key

    1. 案例说明:使用上面案例1的类及列表,新增一个函数getPrice来代替lambda,进行降序排序;
    2. 案例代码:
    >>> 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}]
    >>>
    
    1. 案例截屏
      在这里插入图片描述
    2. 案例分析
      可以看到新增的函数正确被使用。
      通过上述案例,我们可以看到,排序函数sorted和排序方法sort中使用的key参数,是一个可调用的函数,并返回一个可以排序类型的值,排序时使用该返回值作为排序依据。

    老猿Python,跟老猿学Python!
    博客地址:https://blog.csdn.net/LaoYuanPython

    请大家多多支持,点赞、评论和加关注!谢谢!

  • 相关阅读:
    SSM(六)JDK动态代理和Cglib动态代理
    SSM(三)Mybatis动态SQL
    MyBatis无限级分类实现的两种方法--自关联与map集合
    idea上MyBatis第一个例子
    idea 给maven项目添加依赖(二)
    idea 创建maven项目(一)
    Java学习笔记——三层架构
    MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路
    Java学习笔记——MySQL创建表结构
    jQuery入门——注册事件
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11932074.html
Copyright © 2020-2023  润新知