Python之 sort和sorted

昨天闲聊被一人问起Python中sort方法一些参数设定,某不才,玩python时间不长,但是还是有所了解,以下把我理解的sort和sorted稍作整理,如果不到之处,望各位看官指点一二。


sort和sorted基础理解

source_list = [ 5, 2, 3, 8, 6 ]

sort是一个方法,sorted是一个函数,有点面向对象基础的都能区分二者。正因如此,sort和sorted的调用形式有区别,sort是list数据类型的一个内置方法,也就是说,一个 list 对象 source_list 可以通过点调用如下:

source_list . sort(key=None, cmp=None, reverse=False)

注意:1. 一定只能是list对象才能调用,如果你用str,dict, set, tuple 类型实例去调用都抛出异常,告诉你没有sort这个attribute。

            2. sort方法调用结束后没有返回值,切记切记,不要再继续调用什么了,或是作为参数传给其他方法。

            3. sort方法调用结束后调用者内容已经是排序以后结果,那么上述调用完成source_list为 [2, 3, 5, 6, 8]


sorted是一个python内置函数,在调用时要把所要进行排序的对象当作参数传给sorted函数,其调用形式如下:

sorted(data, key=None, cmp=None, reverse=False)

注意:1. 如果传给data不是list,而是str,dict, set, tuple 类型实例,那么sorted方法能正常工作吗?留给读者亲自尝试。

            2. sorted函数调用结束后有返回值,返回值是一个list类型。

            3. sorted函数调用结束后data内容保持不变,也就是说sorted(source_list)结束,source_list自身内容仍是[ 5, 2, 3, 8, 6 ]


key, cmp, reverse参数作用

sort和sorted除了排序效率极高之外,精华之处便是这几个参数设定,我们一个一个看。

source_list = [[2,9], [1,5], [3,7], [5,8]]


reverse = False

reverse很好理解。sort和sorted都是按照从升序排列,reverser默认为False,一旦将reverse置为True,sort和sorted将按照降序排列。

source_list . sort(reverse=False)

调用结束后,无返回但source_list为:[[5, 8], [3, 7], [2, 9], [1, 5]]


key

表示sort方法排序的关键字,例如现在需要将source_list按照每个元素中的第1号位元素排序,可以配置key参数,配合lambda使用是最常见用法,调用形式如下:

source_list sort(key=lambda x : x[1])  # 结果是:[[1, 5], [3, 7], [5, 8], [2, 9]]

lambda是python一种定义匿名函数的用法, 网上有详细介绍,


cmp

cmp参数接收一个整数,比照python内置方法cmp(a, b),a>b, 1; a==b, 0; a<b, -1。常见的也是和lambda结合使用:

source_list sort(key=lambda x,y : cmp(x[1], y[1]))  # 结果也是:[[1, 5], [3, 7], [5, 8], [2, 9]]

那么以下调用返回什么呢?

source_list sort(cmp=lambda a, b : 1 if a[0]<b[0] else -1)

可以自己试一下。


sorted和sort这三个参数没有区别,只是要把原始的source_list作为参数第一个传给sorted方法。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值