首先設計乙個效能試驗來驗證list中檢索乙個值,以及dict中檢索乙個值的計時對比
生成包含連續值的list和包含連續關鍵碼key的dict,用隨機數來檢驗操作符in的耗時
import timeit
import random
for i in
range
(10000
,1000001
,20000):
t = timeit.timer(
"random.randrange(%d) in x"
%i,"from __main__ import random,x"
) x =
list
(range
(i))
lst_time = t.timeit(number=
1000
) x =
d_time = t.timeit(number=
1000
)print
("%d,%10.3f,%10.3f"
%(i, lst_time, d_time)
)
下表是程式執行的結果
規模大小
列表搜尋所用時間
字典搜尋所用時間
10000
0.062
0.001
30000
0.189
0.001
50000
0.329
0.001
70000
0.440
0.001
90000
0.582
0.001
110000
0.710
0.001
130000
0.840
0.001
150000
0.951
0.001
170000
1.077
0.001
190000
1.227
0.001
210000
1.377
0.001
230000
1.499
0.001
250000
1.618
0.001
270000
1.738
0.001
290000
1.892
0.001
310000
2.055
0.001
從上表我們可以看到list的查詢效率遠遠低於dict的效率,原因如下:
python中list物件的儲存結構採用的是線性表,因此其查詢複雜度為o(n),而dict物件的儲存結構採用的是雜湊表,其在最優情況下查詢複雜度為o(1)。
雜湊表的基本概念:
雜湊表(hash table,又稱雜湊表)是一種資料集,其中資料項的儲存方式尤其有利於將來快速的查詢定位。雜湊表中的每乙個儲存位置,稱為槽(slot),可以用來儲存資料項,每個槽有乙個唯一的名稱。實現從資料項到儲存槽名稱的轉換的,稱為雜湊函式(hash function)。下面示例中,雜湊函式接受資料項作為引數,返回整數值0~10,表示資料項儲存的槽號(名稱)。
雜湊表示例:
資料項:54,26,93,17,77,31
本例中我們的雜湊函式是最簡單的求餘:
h(item)= item % 11
按照雜湊函式h(item),為每個資料項計算出存放的位置之後,就可以將資料項存入相應的槽中。
item
hash value
5410264
935176
770319
要查詢某個資料項是否存在於表中,我們只需要使用同乙個雜湊函式,對查詢項進行計算,測試下返回的槽號所對應的槽中是否有資料項即可,從而實現了o(1)時間複雜度的查詢演算法。
python 中字典(dic)的用法
dic 字典使用key values方式,也就是鍵 值的方式 print dic james for key in dic 取出字典中的key值 print key for key in dic.keys 也可以通過這種將key值取出來 print key for values in dic 這說明...
python中字典 dic的操作
d 獲取成員 print d name python的優雅 有就返回,沒有預設返回none,可以設定預設值 print d.get nm 預設值 設定成員 存在就更新 d age 30 不存在時就新增 d weight 80 更新,存在的鍵就更新,不存在的鍵就新增 d.update 刪除元素 del...
python中dict和list排序
1 list排序 列表的排序是python內建功能,自身含有sort方法 如 s 2,1,3,0 s.sort 0,1,2,3 2 dict排序 對字典的排序,因為每乙個項包括乙個鍵值對,所以要選擇可比較的鍵或值進行排序 sorted iterable cmp key reverse cmp和key...