課程
/后端開發
/Python
/python進階
2015-04-05
源自:python進階 6-3
正在回答
當含有其他類是,可以判斷其他類的類型。例如有數字和字符串,數字和分數比較,字符串和名字比較
??? def __cmp__(self, s):??????? if isinstance(s,Student):??????????? if self.score<s.score:??????????????? return -1??????????? elif self.score>s.score:??????????????? return 1??????????? else:??????????????? if self.name<s.name:??????????????????? return -1??????????????? elif self.name>s.name:??????????????????? return 1??????????????? else:??????????????????? return 0??????? elif isinstance(s,str):??????????? if self.name<s:??????????????? return -1??????????? elif self.name>s:??????????????? return 1??????????? else:??????????????? return 0??????? elif isinstance(s,int):??????????? if self.score<s:??????????????? return -1??????????? elif self.score>s:??????????????? return 1??????????? else:??????????????? return 0
這樣寫有點復雜,不如重寫一個cmp方法,重復調用
當然也可以按照其他同學的方法:同類的話進行比較,不同類的話順序不變。但是此方法有問題:如果是中間夾帶,那么只比較前后順序使得最后結果不對。
Ex:L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99),100,'Hello',Student('im', 99)] 最后結果為只排序了前半段。
[(Bob: 88), (Alice: 99), (Tim: 99), 100, 'Hello', (im: 99)]
kall778
s1?=?Student('Alice','female',18,'Middle?school',87) s2?=?Student('Bob','male',17,'Middle?school',78) def?fn_cmp(obj1,obj2): ????if?obj1.__str__()?>?obj2.__str__(): ????????return?-1 ????else: ????????return?0 L=[s1,s2,"hello",13] print?sorted(L,fn_cmp)
例如這樣
可以自己寫一個比較函數來處理?[Student('Tim', 99), Student('Bob', 88), 100, 'Hello'] 這樣的狀況,然后把L和函數同時傳給sorted()
舉報
學習函數式、模塊和面向對象編程,掌握Python高級程序設計
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-05-11
當含有其他類是,可以判斷其他類的類型。例如有數字和字符串,數字和分數比較,字符串和名字比較
??? def __cmp__(self, s):
??????? if isinstance(s,Student):
??????????? if self.score<s.score:
??????????????? return -1
??????????? elif self.score>s.score:
??????????????? return 1
??????????? else:
??????????????? if self.name<s.name:
??????????????????? return -1
??????????????? elif self.name>s.name:
??????????????????? return 1
??????????????? else:
??????????????????? return 0
??????? elif isinstance(s,str):
??????????? if self.name<s:
??????????????? return -1
??????????? elif self.name>s:
??????????????? return 1
??????????? else:
??????????????? return 0
??????? elif isinstance(s,int):
??????????? if self.score<s:
??????????????? return -1
??????????? elif self.score>s:
??????????????? return 1
??????????? else:
??????????????? return 0
這樣寫有點復雜,不如重寫一個cmp方法,重復調用
當然也可以按照其他同學的方法:同類的話進行比較,不同類的話順序不變。但是此方法有問題:如果是中間夾帶,那么只比較前后順序使得最后結果不對。
Ex:L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99),100,'Hello',Student('im', 99)] 最后結果為只排序了前半段。
[(Bob: 88), (Alice: 99), (Tim: 99), 100, 'Hello', (im: 99)]
2015-05-05
例如這樣
2015-05-05
可以自己寫一個比較函數來處理?[Student('Tim', 99), Student('Bob', 88), 100, 'Hello'] 這樣的狀況,然后把L和函數同時傳給sorted()