資料結構
- 2. 9. 資料結構
• 學習目標
– 認識 hashable、iterable、
orderable
– 對物件進行排序
– 認識群集架構
– 運用 collections 模組
– 運用 collections.abc
模組
2
- 5. • set 會對加入之物件,呼叫其 __hash__()
方法取得 hash 值
• 看它是否與目前 set 中既有物件的 hash
值都不相同
– 如果相同就會直接排除而不加入
– 若都不相同,則進一步使用 __eq__() 比較
相等性,以確定是否要加入 set 之中
5
- 6. • 對於 Python 內建型態來說,只要是建立後
– 狀態就無法變動(Immutable)的型態,它的
實例都是 hashable
– 可變動(Muttable)的型態之實例,都是
unhashable
6
- 11. iterable 協定
• 具有 __iter__() 方法的物件,就是一個
iterable 物件
• 傳回的迭代器具有 __next__() 方法,可
以逐一迭代出物件中,的資訊,若無法進
一步迭代,會引發 StopIteration
• 迭代器也會具有 __iter__() 方法,傳回
迭代器自身,因此,每個迭代器本身也是
個 iterable 物件
11
- 16. • 標準程式庫有許多情況下,都接受iterable
物件,在內部自動呼叫 __iter__()
• 若 lt 是[1, 2, 3, 4, 5]:
–set(lt) 會建立 {1, 2, 3}
–tuple(lt) 會建立 (1, 2, 3, 4, 5)
16
- 24. • list 才有 sort() 方法
• 對於其他 iterable 物件,若想進行排序的
話,可以使用 sorted() 函式,可指定的
參數同樣也有 reverse 與 key 參數
• 此函式不會變動原有的函式,排序的結果
會以新的 list 傳回
24
- 28. • 可以指定 operator 模組的 itemgetter,、
attrgetter,前者可以針對具有索引的
結構,後者可以針對物件的屬性:
28
- 32. • tuple、str 與 bytes 是不可變動的循序
類型,具有預設的 hash()實作
• 可變動循序結構,還會有以下的操作行為:
32
- 40. • 如果來源是個 iterable 物件, 除了
Point(*iterable) 的方式之外,還可
以使用 Point._make(iterable) 建立
Point 實例
40
- 46. • 用 collections 的 defaultdict 類別
• defaultdict 接受一個函式,它建立的實
例在當指定的鍵不存在時,就會使用指定
的函式來產生,並直接設定為鍵的對應值 46
- 52. • 如果透過 ChainMap 指定更新某對鍵值,
會在底層中第一個找到鍵的 dict 中更新對
應的值
• 若底層全部的 dict 都找不到對應的鍵時,
就會直接在第一個 dict 新增鍵值
52
- 55. • 想要實現 [] 取值,可以實作
__getitem__()
• 想要實現 [] 設值, 可以實作
__setitem__()
• 若想透過del 與 [] 來刪除, 可以實作
__delitem__()
55
- 62. • Mapping 並不是 dict 的子類別,只是擁
有 dict 的行為
• Sequence 也不是 list 的子類別,只是
擁有 list 的行為
• Set 也不是 set 的子類別,只是擁有 set
的行為
62