我想說的都在下面的代碼中,學至左神。
# 比較器,重載比較運算符
# 對於任意的比較器,首先需要指定兩個數o1,o2
#對返回值有統一的規範
#返回負數時,認爲o1應該排在o2的前面
#返回正數時,認爲o2應該排在o1的前面
#返回0 時, 誰排在前面都可以
#例子1————官方給的是從小到大排序
a = [4,5,6,9,8,2,4,6,3,8,4]
b = sorted(a)
a.sort()
print(a)# 輸出:[2, 3, 4, 4, 4, 5, 6, 6, 8, 8, 9]
print(b)# 輸出:[2, 3, 4, 4, 4, 5, 6, 6, 8, 8, 9]
#例子2————比較器實現從大到小排序
import functools
def myCom_number(o1,o2):
return o2-o1
c = [4,5,6,9,8,2,4,6,3,8,4]
c.sort(key = functools.cmp_to_key(myCom_number))
print(c)
#輸出:[9, 8, 8, 6, 6, 5, 4, 4, 4, 3, 2]
# 例子3:定義一個學生類,對學生排序
class Student(object):
def __init__(self,name,age,classNo):
self.name = name
self.age = age
self.classNo = classNo
def __str__(self):
return ('{},{},{}'.format(self.name,self.age,self.classNo))
# 年齡按照從小到大排序
def myCom_age(o1,o2):
return o1.age - o2.age
# 先按照班級排好,再按照年齡從大到小排好
def myCom_No_age(o1,o2):
if o1.classNo!=o2.classNo:
return o1.classNo-o2.classNo
return o2.age - o2.age
stu1 = Student('摸魚人生',16,1)
stu2 = Student('尾號9536',18,2)
stu3 = Student('奔跑',12,1)
stu4 = Student('沒落',25,2)
arrs = [stu1,stu2,stu3,stu4]
b = sorted(arrs,key = functools.cmp_to_key(Student.myCom_age))
for j in range(len(b)):
print(b[j])
'''
奔跑,12,1
摸魚人生,16,1
尾號9536,18,2
沒落,25,2
'''
arrs.sort(key = functools.cmp_to_key(Student.myCom_No_age))
for i in range(len(arrs)):
print(arrs[i])
'''
摸魚人生,16,1
奔跑,12,1
尾號9536,18,2
沒落,25,2
'''