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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章