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

首頁 > 編程 > Python > 正文

python利用拉鏈法實現字典方法示例

2020-02-23 04:29:16
字體:
來源:轉載
供稿:網友

前言

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

在Python中怎樣用列表實現字典?

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

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

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

num的數足夠大,就能夠保證列表中的每一個列表里面只有一個元素。根據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): # 根據指定的 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): # 根據 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查到的時間,可見下圖

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 营口市| 清流县| 弥渡县| 石屏县| 莒南县| 辰溪县| 河北区| 汕尾市| 墨脱县| 建昌县| 密山市| 融水| 昌黎县| 湖南省| 青州市| 漳平市| 抚顺县| 甘孜| 上思县| 宁阳县| 柳林县| 丰顺县| 达日县| 射阳县| 云梦县| 肃北| 邳州市| 原阳县| 靖边县| 乌审旗| 山丹县| 基隆市| 高台县| 临高县| 明溪县| 寿阳县| 南安市| 永修县| 重庆市| 富顺县| 邻水|