Python 中list ,set,dict的大規模查找效率對比詳解

 更新時間:2019年10月11日 11:47:36   作者:Icoding_F2014   我要評論
這篇文章主要介紹了Python 中list ,set,dict的大規模查找效率對比詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

很多時候我們可能要頻繁的進行元素的find 或in操作,本人一直天真的以為python的list做了hash,通過紅黑樹來高效查找···直到今天我真正來測試它和set,dict的查找效率時,才發現自已想太多了!!!!

先看代碼:

__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種數據結構供查找,常規的list,集合sl,字典dl.里面的元素都是隨機生成的,為什么要隨機生成元素?這是防止某些結構對有序數據的偏向導致測試效果不客觀。

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的效率

結果:

set: 0.01762632617301519
dict: 0.021149536796960248
······
···
··

呵呵呵呵···list等了20分鐘都沒出結果。

所以···結果一覽無余啊。

查找效率:set>dict>list

單次查詢中:看來list 就是O(n)的;而set做了去重,本質應該一顆紅黑樹(猜測,STL就是紅黑樹),復雜度O(logn);dict類似對key進行了hash,然后再對hash生成一個紅黑樹進行查找,其查找復雜其實是O(logn),并不是所謂的O(1)。O(1)只是理想的實現,實際上很多hash的實現是進行了離散化的。dict比set多了一步hash的過程,so 它比set慢,不過差別不大。

so,如果是要頻繁的查找,請使用set吧!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python簡單獲取本機計算機名和IP地址的方法

    python簡單獲取本機計算機名和IP地址的方法

    這篇文章主要介紹了python簡單獲取本機計算機名和IP地址的方法,涉及Python中socket模塊的相關使用技巧,需要的朋友可以參考下
    2015-06-06
  • python list元素為tuple時的排序方法

    python list元素為tuple時的排序方法

    下面小編就為大家分享一篇python list元素為tuple時的排序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • import的本質解析

    import的本質解析

    import是我們經常使用的功能,方法大家也都會。雖然用的多,但它的本質我們似乎沒有好好的了解過。本文就import的本質解析,向大家作了介紹,需要的朋友可以參考下。
    2017-10-10
  • python簡單實現刷新智聯簡歷

    python簡單實現刷新智聯簡歷

    本文給大家分享的是個人弄的一個使用Python簡單實現刷新智聯招聘簡歷的小工具的代碼,非常的簡單,給大家參考下吧。
    2016-03-03
  • python 搭建簡單的http server,可直接post文件的實例

    python 搭建簡單的http server,可直接post文件的實例

    今天小編就為大家分享一篇python 搭建簡單的http server,可直接post文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python 讀取豎線分隔符的文本方法

    python 讀取豎線分隔符的文本方法

    今天小編就為大家分享一篇python 讀取豎線分隔符的文本方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python XML轉Json之XML2Dict的使用方法

    Python XML轉Json之XML2Dict的使用方法

    今天小編就為大家分享一篇Python XML轉Json之XML2Dict的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python操作遠程服務器 paramiko模塊詳細介紹

    Python操作遠程服務器 paramiko模塊詳細介紹

    這篇文章主要介紹了Python操作遠程服務器 paramiko模塊詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • postman傳遞當前時間戳實例詳解

    postman傳遞當前時間戳實例詳解

    在本篇文章里小編給大家整理的是一篇關于postman傳遞當前時間戳知識點相關內容,有需要的朋友們可以學習下。
    2019-09-09
  • 利用python實現簡單的循環購物車功能示例代碼

    利用python實現簡單的循環購物車功能示例代碼

    購物車對我們每位開發者來說應該都不陌生,下面這篇文章主要給大家介紹了利用python實現簡單的循環購物車功能的相關資料,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面來一起看看吧。
    2017-07-07

最新評論

pc蛋蛋计划下载