python版比較器——手把手教你學會(含鏈表)

我想說的都在下面的代碼中,學至左神。

# 比較器,重載比較運算符
# 對於任意的比較器,首先需要指定兩個數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
'''


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章