国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:17:22
字體:
供稿:網(wǎng)友

前言

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

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

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

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

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

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

到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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西平县| 河北区| 清苑县| 伊金霍洛旗| 洪泽县| 河东区| 衡东县| 沁阳市| 贡嘎县| 甘孜| 德昌县| 鄂温| 东光县| 车险| 沙河市| 陇西县| 琼海市| 木兰县| 林甸县| 开原市| 子洲县| 临澧县| 大荔县| 晋州市| 哈尔滨市| 利川市| 宜宾县| 玛多县| 宝兴县| 云霄县| 横峰县| 怀远县| 交口县| 梅河口市| 民乐县| 平安县| 汉阴县| 高邑县| 中阳县| 临夏县| 阳西县|