python中的set實現不重複的原理

2022-08-21 02:18:09 字數 569 閱讀 8511

最近在嘗試寫選課系統的時候遇到乙個問題:

1、存在兩個類 school、teacher ;

2、school例項中包含多個teacher的例項,但又不可重複

本人想到在school中用set()儲存,但是新增teacher例項的時候做不到去重,後來猜測應該是set會自動呼叫__eq__方法比較物件是否重複,因此重寫了該方法:

def __eq__(self, other):

return self.name == other.name

結果仍然報錯typeerror: unhashable type,如下:

研究了很久,發現teacher無法hash的原因是該類中缺少__hash__方法,導致直譯器不知道如何雜湊該物件,新增以下**後問題解決:

def

__hash__

(self):

return hash(self.name)

綜上發現:

如果想要將物件用set去重,需要重寫__eq__和__hash__兩個方法。

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 ...