2013-12-12 70 views
3

如何設置查找元素比列表快得多,是否與列表中的有序維護有關?或者查找算法與列表中的設置不同?設置比列表快得多,同時查找成員資格

>>> from timeit import Timer  
>>> Timer("100042 in L", "L=range(100000)").timeit(number=10000) 
21.69940710067749 
>>> 
>>> Timer("100042 in S", "S=set(range(100000))").timeit(number=10000) 
0.0006740093231201172 
>>> 

有人指出我在兩者之間使用的任何鏈接或算法?

回答

7

set使用哈希(it allows only items which are hashable),這將比list的順序訪問快得多,用於隨機查找。

但是,list可能擊敗set,如果正在搜索的項目在開頭。

from timeit import Timer 
print Timer("0 in L", "L=range(100000)").timeit(number=10000) 
print Timer("0 in S", "S=set(range(100000))").timeit(number=10000) 

輸出我的機器上

0.00127078635541 
0.00143169642464 

編輯:時間上的各種對象的不同操作的複雜性都記錄here。謝謝@mgilson :)

+0

小心顯示任何證據? *官方鏈接或如此.... * –

+1

@KDawG,嗨,有一個類似的問題[如何CPython的set()實現?](http://stackoverflow.com/questions/3949310/how-is-cpythons-設置實施) – flyer

+0

@KDawG包含在解決方案中的參考。請立即檢查。 – thefourtheye