最近在嘗試寫選課系統的時候遇到乙個問題:
1、存在兩個類 school、teacher ;
2、school例項中包含多個teacher的例項,但又不可重複
本人想到在school中用set()儲存,但是新增teacher例項的時候做不到去重,後來猜測應該是set會自動呼叫__eq__方法比較物件是否重複,因此重寫了該方法:
def __eq__(self, other):
return程式設計客棧 self.na程式設計客棧mwww.cppcns.come == other.name
結果仍然報錯typeerror: unhashable type,如下:
研究了很久,發現teacher無法hash的原因是該類中缺少__hash__方法,導致直譯器不知道如何雜湊該物件,新增以下**後問題解決:
def __hash__(self):
return hash(self.name)
綜上發現:
如果想要將物件用set去重,需要重寫__eq__和__hash__兩個方法。
總結以上所述是小編給大家介紹的python中的set程式設計客棧實現不重複的排序原理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們**的支援!
本文標題: python中的set實現不重複的排序原理
本文位址: /jiaoben/python/218542.html
python中的set實現不重複的原理
最近在嘗試寫選課系統的時候遇到乙個問題 1 存在兩個類 school teacher 2 school例項中包含多個teacher的例項,但又不可重複 本人想到在school中用set 儲存,但是新增teacher例項的時候做不到去重,後來猜測應該是set會自動呼叫 eq 方法比較物件是否重複,因此...
python中的set操作
python view plain copy python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.se...
python中的set操作
python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援 x in set,len set ...