最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

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

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

到O(1)的時(shí)間。

方法示例

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查到的時(shí)間,可見下圖

總結(jié)

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

相關(guān)文章

  • Python高級數(shù)據(jù)分析之pandas和matplotlib繪圖

    Python高級數(shù)據(jù)分析之pandas和matplotlib繪圖

    Matplotlib是一個(gè)強(qiáng)大的Python繪圖和數(shù)據(jù)可視化的工具包,下面這篇文章主要給大家介紹了關(guān)于Python高級數(shù)據(jù)分析之pandas和matplotlib繪圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • python+requests接口壓力測試500次,查看響應(yīng)時(shí)間的實(shí)例

    python+requests接口壓力測試500次,查看響應(yīng)時(shí)間的實(shí)例

    這篇文章主要介紹了python+requests接口壓力測試500次,查看響應(yīng)時(shí)間的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python 非線性規(guī)劃方式(scipy.optimize.minimize)

    python 非線性規(guī)劃方式(scipy.optimize.minimize)

    今天小編就為大家分享一篇python 非線性規(guī)劃方式(scipy.optimize.minimize),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django框架實(shí)現(xiàn)的分頁demo示例

    Django框架實(shí)現(xiàn)的分頁demo示例

    這篇文章主要介紹了Django框架實(shí)現(xiàn)的分頁demo,結(jié)合實(shí)例形式分析了Django框架分頁的步驟、原理、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • python列表推導(dǎo)式 經(jīng)典代碼

    python列表推導(dǎo)式 經(jīng)典代碼

    這篇文章主要介紹了python列表推導(dǎo)式,文章內(nèi)容附有經(jīng)典的詳細(xì)代碼,感興趣的小伙按可以參考下面文章具體內(nèi)容
    2021-10-10
  • opencv銀行卡號識別的項(xiàng)目實(shí)踐

    opencv銀行卡號識別的項(xiàng)目實(shí)踐

    本文主要介紹了opencv銀行卡號識別的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Python編程實(shí)現(xiàn)蟻群算法詳解

    Python編程實(shí)現(xiàn)蟻群算法詳解

    這篇文章主要介紹了Python編程實(shí)現(xiàn)蟻群算法詳解,涉及螞蟻算法的簡介,主要原理及公式,以及Python中的實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python基礎(chǔ)異常處理梳理總結(jié)

    Python基礎(chǔ)異常處理梳理總結(jié)

    這篇文章主要介紹了Python基礎(chǔ)異常處理梳理總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Django1.11自帶分頁器paginator的使用方法

    Django1.11自帶分頁器paginator的使用方法

    這篇文章主要為大家詳細(xì)介紹了Django1.11自帶分頁器Django的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • django?python?獲取當(dāng)天日期的方法

    django?python?獲取當(dāng)天日期的方法

    這篇文章主要介紹了django?python?獲取當(dāng)天日期,在Python中,你可以使用datetime模塊來獲取當(dāng)前日期,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論

高雄县| 新巴尔虎右旗| 哈巴河县| 桃江县| 特克斯县| 基隆市| 察哈| 兰考县| 高雄县| 和硕县| 阿瓦提县| 历史| 罗源县| 前郭尔| 双城市| 兴隆县| 文登市| 筠连县| 铅山县| 呼玛县| 敦化市| 靖宇县| 德州市| 石林| 马鞍山市| 紫云| 闽清县| 桑日县| 平塘县| 新蔡县| 宣化县| 蒙阴县| 平邑县| 葵青区| 宜丰县| 双流县| 建阳市| 墨脱县| 松桃| 奉化市| 兴隆县|