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

从Python2.4起,list.sort和sorted方法增加了‘key’参数,用于指定比较前调用的函数,以其返回值作为比较依据。使用key参数有两种方法,即使用普通函数和匿名函数lambda。文中通过两个案例展示了这两种方法的使用。

从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.youkuaiyun.com/LaoYuanPython

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

Python中,`sort`和`sorted`都用于排序操作,但使用方法和特性有所不同。 ### 使用方法 - **sort()**:是应用在列表(list)上的方法,使用方法为`list.sort()`。该方法没有返回值,直接对原有列表进行排序操作,排序完成后原列表顺序会改变 [^1][^3][^5]。 - **sorted()**:是Python内置的全局方法,可以对所有可迭代的对象进行排序操作,使用方法为`sorted(iterable)`,其中`iterable`是要排序的可迭代对象。该函数会返回一个新的已排序的可迭代对象,不会改变原来的对象 [^1]。 ### 区别 - **适用对象**:`sort`只能用于列表;而`sorted`可以对所有可迭代对象进行排序,如列表、元组、集合等 [^1]。 - **是否改变原对象**:`sort`会直接修改原列表;`sorted`返回新的可迭代对象,原对象保持不变 [^1]。 - **返回值**:`sort`没有返回值;`sorted`返回一个新的已排序的可迭代对象 [^5]。 ### 示例 以下是`sort()`和`sorted()`的使用示例代码: ```python # sort() 的使用示例 lst = [3, 1, 4, 1, 5, 9, 2, 6, 5] lst.sort() print(lst) # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9] # sorted() 的使用示例 lst = [3, 1, 4, 1, 5, 9, 2, 6, 5] new_lst = sorted(lst) print(new_lst) # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9] print(lst) # 输出:[3, 1, 4, 1, 5, 9, 2, 6, 5] ``` 另外,`sorted`函数和`sort`方法还有一个`key`参数,可以提供一个函数,它们会根据这个函数的返回值对元素进行排序。示例如下: ```python items = [('apple', 2.5), ('banana', 1.8), ('cherry', 3.0)] # 使用 def 的繁琐方式 def get_price(item): return item[1] sorted_items = sorted(items, key=get_price) print(sorted_items) # 使用 lambda 的简洁方式 sorted_items_lambda = sorted(items, key=lambda item: item[1]) print(sorted_items_lambda) # 输出都是:[('banana', 1.8), ('apple', 2.5), ('cherry', 3.0)] ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值