Python 集合(Set)
阿新 • • 發佈:2020-08-23
Python 中集合和字典的形式相似,可以看作只有鍵值的字典。
儲存方式:
以Hash表進行儲存,典型的以空間換時間的策略。
定義方式:
空字典:d = {}或者 d = set()
帶初始值:d = {‘a’, 'b':}
特性:
(1)集合為可變型別,其內部元素可動態修改(增刪改)
(2)如果key值重複,後面的資料將覆蓋前面的資料。
(3)Python中所有的型別都能進行結合儲存,因為Python中一切皆物件,所有物件都有預設的hash演算法和比較演算法
(4)Python 中非基礎型別的物件作為key時,將根據物件的地址進行hash和比較執行。
(5)支援常用內建方法(cmp, len, str)等
(6)集合更像數學容器,支援並集,交集等運算
集合的數學運算:
d1 = {1, 2, 3}
d2 = {2, 3, 4, 5}
d1.union(d2) # 並集 {1, 2, 3, 4, 5}
d1.intersection(d2) # 交集 {2, 3}
d1.symmetric_difference(d2) # 差集{1, 4, 5}
d1.difference(d2) # 差集(d1存在,d2不存在){1}
d2.difference(d1) # 差集(d2存在,d1不存在){4, 5}
d1 & d2 # 交集, 同intersection {2, 3}
d1 | d2 # 並集,同union {1, 2, 3, 4, 5}
常用方法:
d1 = {1, 2, 3}
d1.add(4) # 給集合新增一個元素
d1.remove(1) # 刪除元素1
d1.pop() # 刪除最後一個元素
d1.update({2, 3, 4}) # 用{2,3,4}更新集合,結果為d1 = {2,3, 4}
d1.copy() # 淺拷貝一份d1
自定義Hash
Python 非基礎型別的hash和比較演算法是基於例項的地址進行計算的,對於自定義類,每個例項物件都將成員其一個元素。
現在我需要通過x值進行比較,如果x值相同則認為兩個例項相同,怎麼實現?
答:過載類的__hash__演算法和__eq__(或者__cmp__)演算法即可。