list排序sort降序_list.sort 与 sorted Built-In Function

ed0c064b504226e805f5d8a76234c3c5.png
引自《Fluent Python》影印版P42,比较list.sort和内建sorted函数。以及官方文档。

list.sort

list.sort方法将对该list就地(in place)做排序,即不生成新对象(不对原对象做拷贝)。该函数返回None,表明对原对象做修改。

Python中API的不成文的规定:标明返回None的函数,表明对该对象原地(in place)修改,即修改原对象,无新对象产生。但这样也有一个缺点:无法串联使用。比如,无法这样编写代码:(list.sort).sort

sorted Built-in Function

相反,内置的sorted函数可以创造并返回一个新的list。其实sorted函数可接受任意的iterable object,包括不可变序列和生成器。

相同点

两者都只接受两个参数:reverse和key

  • reverse : 如果为True,代表降序排列,默认为False
  • key:一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。比如说,在对一些字符串排序时,可以用key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。

为了更好的理解,请阅读如下代码:

fruits 

key的应用

上节提到的key参数,为排序时的比较算法提供了很大的灵活性。举个例子:

student_tuples 

上例子中,用lambda函数定义了比较算法(即提取学生成绩),将其赋予key。

同样也可以用于object实例:

class 

Operator Module Functions

由于在Python中经常需要key-function模式的参数,所以提供了方便的用于容易、快速的访问函数。即 operator模块下的itemgetter(),attrgetter(),和methodcaller().

直接看例子:

from 

operator模块函数还允许多层排序,比如先按成绩排序,再按年龄排序:

sorted
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值