python版比较器(左成云第三讲重点)

import functools
class Student(object):
	def __init__(self,name,age,classnum):
		self.name = name
		self.age = age
		self.classnum = classnum
	# 年龄按照从小到大排序
	def sort_age(a,b):
		return a.age - b.age
	# 先按照班级排好,再按照年龄从大到小排好
	def class_and_age(a,b):
		if a.classnum!=b.classnum:
			return a.classnum-b.classnum
		return b.age - a.age

a=Student('111',19,3)
b=Student('222',20,2)
c=Student('333',31,1)

res=[a,b,c]
for i in res:
    print('before',i)
print('-----------------------------'*2)
res=sorted(res,key=functools.cmp_to_key(Student.sort_age))
for i in res:
    print('after',i)
print('-----------------------------'*2)
res=sorted(res,key=functools.cmp_to_key(Student.class_and_age))
for i in res:
    print('after2',i)

在这里插入图片描述
返回负数时,a应该排在b的前面
返回正数时,认为b应该排在a的前面
返回0 时, 谁排在前面都可以

————————————————————————————
上面是自建类,有时候可以用sorted中的cmp来搭配lambda使用。
cmp(x,y)表示如果x-y<0,那么就是升序排列,如果y-x>0,那就表示降序排列,也对应于负数,a应该排在b的前面的规律。

res=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(res, cmp=lambda x,y:cmp(x[1],y[1]))

res=[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(res, key=lambda x:x[1])               # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值