python中sort函数_聊一聊Python的sort函数

在平常的开发中,排序是一个经常会用到的功能。Python提供了sort和sorted函数来进行排序。

sort函数是list类型的一个方法,调用后直接对list本身进行排序。sorted则是输入一个list对象作为参数,返回一个排序完毕的list。

如下代码所示:

a = [5,4,3,2,1]

print sorted(a)

当然上面是一个非常简单的案例,我们接下来讲一下sort函数的参数:

参数reverse指的是排序结果是降序还是升序,默认是升序(此时值为False)

cmp是早期版本的Python提供的一个用于判断排序顺序的参数,它的传入值为一个函数compare(x,y),compare(x,y)函数会在xy时返回正数,如果x=y则返回0,如下所示:

l = [(1,2), (3,4), (5,0)]

l.sort(cmp=lambda it1, it2:it1[1]-it2[1])

print l

输出值为[(5, 0), (1, 2), (3, 4)]。可以看到它是按照列表每个元素中第二个数为依据,按照从小到大的顺序排序的。

在Python2.4以后,加入了key参数,进一步简化了函数的形式。传入的函数只有一个参数,返回一个值,sort或sorted函数将根据返回值来作为排序的依据:

l = [(1,2), (3,4), (5,0)]

l.sort(key=lambda it:it[1])

print l

得到的结果也是[(5, 0), (1, 2), (3, 4)]。可以说形式上比cmp要简单了一些。

如果key和cmp都传入,并且二者之间还是矛盾的话会怎么样呢?我自己还真试了一下,结果发现程序报错了:

l = [(1,2), (3,4), (5,0)]

print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])

输出为:

Traceback (most recent call last):

File "F:\MyDocuments\python\test", line 2, in

print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])

File "F:\MyDocuments\python\test", line 2, in

print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])

TypeError: 'int' object has no attribute '__getitem__'

因此,平时这两个参数之间也不要混用。在Python3.4以后,为了避免歧义,已经将cmp函数删掉了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值