Python中list和dict的in操作的區別

2021-10-03 20:00:07 字數 1986 閱讀 5861

首先設計乙個效能試驗來驗證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...