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

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

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

前言

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

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

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

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

拉鏈法:就是在一個列表中每個位置再添加一個列表,這樣就算是有hash沖突也能夠存儲進去,當選取的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): # 可以通過下標來取值
  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查到的時間,可見下圖

總結

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

相關文章

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

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

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

    python+requests接口壓力測試500次,查看響應時間的實例

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

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

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

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

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

    python列表推導式 經典代碼

    這篇文章主要介紹了python列表推導式,文章內容附有經典的詳細代碼,感興趣的小伙按可以參考下面文章具體內容
    2021-10-10
  • opencv銀行卡號識別的項目實踐

    opencv銀行卡號識別的項目實踐

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

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

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

    Python基礎異常處理梳理總結

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

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

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

    django?python?獲取當天日期的方法

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

最新評論

聂荣县| 禄劝| 余庆县| 普兰店市| 石河子市| 天峨县| 若羌县| 孟村| 米易县| 平江县| 万安县| 依安县| 江达县| 南江县| 运城市| 乌鲁木齐县| 唐河县| 平原县| 松原市| 噶尔县| 紫阳县| 屏山县| 永清县| 泌阳县| 湟源县| 金山区| 红原县| 清原| 通州市| 都江堰市| 罗城| 宝山区| 抚州市| 道孚县| 德钦县| 昌江| 徐州市| 海门市| 五大连池市| 江安县| 汉中市|