亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python利用拉鏈法實現(xiàn)字典方法示例

 更新時間:2017年03月25日 11:14:12   作者:escapist  
這篇文章主要介紹了python利用拉鏈法實現(xiàn)字典的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友可以們下面來一起看看吧。

前言

字典也叫散列表,最大的特點是通過key來查找其對應(yīng)的值其時間復(fù)雜度是O(1),下面這篇文章就來給大家介紹介紹python利用拉鏈法實現(xiàn)字典的方法。

在Python中怎樣用列表實現(xiàn)字典?

用列表實現(xiàn)字典最大的問題就是解決hash沖突,如果在列表中通過計算不同的key得到相同的相同了位置,這時候應(yīng)該怎么辦?

最簡單的辦法就是使用拉鏈法.

拉鏈法:就是在一個列表中每個位置再添加一個列表,這樣就算是有hash沖突也能夠存儲進去,當(dāng)選取的hash函數(shù)足夠好,

num的數(shù)足夠大,就能夠保證列表中的每一個列表里面只有一個元素。根據(jù)key計算的元素所在的位置,然后來取值就能達

到O(1)的時間。

方法示例

class MyDict:
 def __init__(self, num=100): # 指定列表大小
  self._num = num
  self._lst = []
  for _ in range(self._num):
   self._lst.append([])

 def update(self, key, value): # 添加 key-value
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if key == k:
    self._lst[key_index][i] = [key, value]
    break
  else:
   self._lst[key_index].append([key, value])

 def get(self, key): # 根據(jù)指定的 key 彈出值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def pop(self, key): # 根據(jù) key 彈出元素 并且刪除
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if k == key:
    result = v
    self._lst.pop(i)
    return result
  else:
   raise KeyError('No such {} key'.format(key))

 def __getitem__(self, key): # 可以通過下標(biāo)來取值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def keys(self): # 取得所有的key
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield k

 def values(self): # 取得所有的 value
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield v

 def items(self): # 取得所有的條目
  for index in range(self._num):
   for item in self._lst[index]:
    yield item

通過key查到的時間,可見下圖

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 實例講解python中的序列化知識點

    實例講解python中的序列化知識點

    本篇文章通過代碼實例給大家詳細分享了關(guān)于python中的序列化知識點內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2018-10-10
  • Python中NumPy的ufuncs函數(shù)實例

    Python中NumPy的ufuncs函數(shù)實例

    這篇文章主要介紹了Python中NumPy的ufuncs函數(shù)實例,NumPy是一個開源的Python科學(xué)計算庫,使用NumPy,就可以很自然地使用數(shù)組和矩陣,本文主要介紹Python Numpy ufuncs通用函數(shù),需要的朋友可以參考下
    2023-07-07
  • 對Python 檢查文件名是否規(guī)范的實例詳解

    對Python 檢查文件名是否規(guī)范的實例詳解

    今天小編就為大家分享一篇對Python 檢查文件名是否規(guī)范的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 使用Python發(fā)送Post請求以及解析響應(yīng)結(jié)果

    使用Python發(fā)送Post請求以及解析響應(yīng)結(jié)果

    發(fā)送post的請求參考例子很簡單,實際遇到的情況卻是很復(fù)雜的,下面這篇文章主要給大家介紹了關(guān)于如何使用Python發(fā)送Post請求以及解析響應(yīng)結(jié)果的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Python的pdfplumber庫將pdf轉(zhuǎn)為圖片的實現(xiàn)

    Python的pdfplumber庫將pdf轉(zhuǎn)為圖片的實現(xiàn)

    本文主要介紹了Python的pdfplumber庫將pdf轉(zhuǎn)為圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • django項目登錄中使用圖片驗證碼的實現(xiàn)方法

    django項目登錄中使用圖片驗證碼的實現(xiàn)方法

    這篇文章主要介紹了django項目登錄中使用圖片驗證碼的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • opencv+playwright滑動驗證碼的實現(xiàn)

    opencv+playwright滑動驗證碼的實現(xiàn)

    滑動驗證碼是常見的驗證碼之一,本文主要介紹了opencv+playwright滑動驗證碼的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 使用pyqt5搭建yolo3目標(biāo)識別界面的方法

    使用pyqt5搭建yolo3目標(biāo)識別界面的方法

    這篇文章主要介紹了使用pyqt5搭建yolo3目標(biāo)識別界面的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談python的輸入輸出,注釋,基本數(shù)據(jù)類型

    淺談python的輸入輸出,注釋,基本數(shù)據(jù)類型

    這篇文章主要介紹了python的輸入輸出,注釋,基本數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于Python實現(xiàn)高配版王者小游戲

    基于Python實現(xiàn)高配版王者小游戲

    咳咳,又是一款新的小游戲,就是大家熟悉的王者~本文將利用python來實現(xiàn)高(di)配版的王者的小游戲,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03

最新評論