字典中的雜湊表其實就是稀疏陣列(總會有一些元素是空白的陣列),雜湊表中的單元叫:表元,在構建字典時會有產生兩個表元,乙個用來標記健,乙個用來標記值,因為兩個表元的長度都是相等的,所以可以通過表元的偏移量來查詢字典。
python中最具有效率的內建資料型別就是字典和集合,這兩種都是通過雜湊表來實現的。為了測試python中字典,集合和其他的資料型別的速度我做了以下的實驗:
import time
max = 10000000
list_a = [i for i in range(max)]
set_a = set(list_a)
dict_a = {}.fromkeys(list_a)
test = [i for i in range(1000)]
deftesttime
(x,name):
start = time.clock()
for i in test:
if i in x:
pass
print name,':','%f' % (time.clock() - start)
testtime(list_a, 'list')
testtime(set_a, 'set')
testtime(dict_a, 'dict')
結果:
list : 0.012472
set : 0.000079
dict : 0.000071
從上面可以看出集合與字典相比其他型別要快得多,這是因為列表中沒有雜湊表支援in運算子。
雜湊的演算法:比如python要獲取dict[key]背後的值,python會先使用hash(key)來計算key的雜湊值,用然後去雜湊值的最低位的幾位數字作為表元的偏移量,如果表元是空的,就會丟擲乙個keyerror異常,如果找到,就會獲得乙個:key:value值,python再最後會比較兩個key的雜湊值是否一致。如果為真返回value,如果不相等這時候就稱為雜湊衝突。這種情況的發生是因為雜湊表把隨機的元素對映到幾位數字上去。而雜湊表有依賴這個數字做檢索。為了解決這個問題,雜湊表就會再從新取幾位數字,去表元中尋找。如果表元為空這回丟擲乙個keyerror異常,如果沒有找到就會重複上面的步驟直到找到。
說說Python中字典和雜湊表,雜湊衝突的解決原理
雜湊表 python 用雜湊表來實現 dict。雜湊表其實是乙個稀疏陣列 總是有空白元素的陣列稱為稀疏陣列 在一般書中,雜湊表裡的單元通常叫做表元 bucket 在 dict 的雜湊表當中,每個鍵值對都占用乙個表元,每個表元都有兩個部分,乙個是對鍵的引用,乙個是對值的引用。因為每個表元的大小一致,所...
流暢的python 《流暢的python》第一天
我們看到 python 可以用len 或者arr 0 它們是怎麼實現的,其實就是兩個魔法方法 len 和 getitem 用撲克牌的例子學習一下,我們知道知道撲克牌有花色 黑桃,紅桃,方塊,梅花 有大小 2 10 jqka 如何創造一套牌的物件呢?首先學習collections的namedtuple...
python內建字典 python中字典的內建方法
python字典包含了以下內建方法 功能 字典 clear 函式用於刪除字典內所有元素。語法 dict.clear 引數 無 返回值 沒有任何返回值。dict print 字典長度 d len dict 字典長度 2 dict.clear print 字典刪除後長度 d len dict 字典刪除後...