流暢的python自學筆記(第三章)

2021-10-09 21:19:16 字數 1754 閱讀 8160

可雜湊型別的定義

如果乙個物件是可雜湊的,那麼在這個物件的生命週期中,它的雜湊值是不變 的,而且這個物件需要實現 __hash__() 方法。另外可雜湊物件還要有 __qe__() 方法,這樣才能跟其他鍵做比較。如果兩個可雜湊物件是相等的,那麼它們的雜湊值一定是一樣的……

這是流暢的python中的原話。

# 一般情況下,使用者自己建立的變數都是可雜湊的

# str,bytes,數值型別如int float doubl等,都是可雜湊的

# frozenset因定義只能容納可雜湊型別,故也可雜湊

# 元組要看其中元素是否有不可雜湊的型別

# 例子如下

ff =(1

,2,(

3,4)

)f =(2

,3,[

1,4]

)hash

(f)# 報錯

fff =(1

,2,frozenset([

3,4]

))hash

(fff)

# 正常

字典setdefault

# 字典裡面,哎,說實話,書裡面舉的例子挺好的,不列舉了,把重要的說一下

a_dict.setdefault(key,

)if key not

in a_dict:

a_dict[key]=[

]# 兩種的功能是一樣的,所以可以看出,setdefault函式可以至少簡化一次搜尋

字典的變種ordereddict

# 如果想要字典的列印,和我們輸入的順序一樣,就要用到ordereddict

from collections import ordereddict

a_dict = ordereddict(

)a_dict[

"name"]=

"lhf"

a_dict[

"phone_num"]=

"1111"

a_dict[

"love"]=

"xyp"

字典的變種counter

from collections import counter

ct = collections.counter(

'abracadabra'

)# 計算這個單詞中各個字母的個數,並返回乙個字典

print

(ct)

# counter() 輸出結果

集合

集合的本質是許多唯一物件的聚類,可以用來去重

給定兩個集合 a 和 b

a | b 返 回的是它們的合集

a & b 得到的是交集

而 a - b 得到的是差集

合理地利用這些操作,不僅能夠讓**的行數變少,還能減少 python 程式的執行時間

本章最後的結論

dict 和 set 背後的雜湊表效率很高

對它的了解越深入,就越能理解為什麼被儲存的元素會呈現出不同的順序,以及已有的元素順序會發生變化的原因。

同時,速度是以犧牲空 間為代價而換來的。

(這篇部落格裡面有**進行比較。

《流暢的python》學習筆記(三)

字典是python的基石 除dict外,有其他好用的如defaultdict orderedict chainmap counter 屬於collections模組 字典提供了多種構造方法,比如 a dict one 1,two 2,three 3 b c dict zip one two thre...

《流暢的Python》讀書筆記(三)

country code my dict.setdefault key,使用 collections.defaultdict import collections index collections.defaultdict list index hunan changsha index defaul...

python自學 第三週

coding utf 8 from functools import reduce 處理序列中的每個元素,得到的結果是乙個 列表 迭代器 元素個數與位置和原來的一樣 map print list filter lambda p p age 18,p print list zip p s slice ...