這篇文章主要介紹Python中l(wèi)ist ,set,dict大規(guī)模查找效率對比的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
站在用戶的角度思考問題,與客戶深入溝通,找到涿州網(wǎng)站設(shè)計與涿州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋涿州地區(qū)。先看代碼:
__author__ = 'jmh081701' import numpy import time l=[] sl=set() dl=dict() r=numpy.random.randint(0,10000000,100000) for i in range(0,100000): l.append(r[i]) sl.add(r[i]) dl.setdefault(r[i],1) #生成3種數(shù)據(jù)結(jié)構(gòu)供查找,常規(guī)的list,集合sl,字典dl.里面的元素都是隨機(jī)生成的,為什么要隨機(jī)生成元素?這是防止某些結(jié)構(gòu)對有序數(shù)據(jù)的偏向?qū)е聹y試效果不客觀。 start=time.clock() for i in range(100000): t=i in sl end=time.clock() print("set:",end-start) #計算通過set來查找的效率 start=time.clock() for i in range(100000): t=i in dl end=time.clock() print("dict:",end-start) #計算通過dict的效率 start=time.clock() for i in range(100000): t=i in l end=time.clock() print("list:",end-start) #計算通過list的效率
結(jié)果:
set: 0.01762632617301519 dict: 0.021149536796960248 ······ ··· ··
呵呵呵呵···list等了20分鐘都沒出結(jié)果。
所以···結(jié)果一覽無余啊。
查找效率:set>dict>list
單次查詢中:看來list 就是O(n)的;而set做了去重,本質(zhì)應(yīng)該一顆紅黑樹(猜測,STL就是紅黑樹),復(fù)雜度O(logn);dict類似對key進(jìn)行了hash,然后再對hash生成一個紅黑樹進(jìn)行查找,其查找復(fù)雜其實是O(logn),并不是所謂的O(1)。O(1)只是理想的實現(xiàn),實際上很多hash的實現(xiàn)是進(jìn)行了離散化的。dict比set多了一步hash的過程,so 它比set慢,不過差別不大。
so,如果是要頻繁的查找,請使用set吧!
以上是“Python中l(wèi)ist ,set,dict大規(guī)模查找效率對比的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!