python利用拉链法实现字典方法示例

python利用拉链法实现字典方法示例,第1张

概述前言字典也叫散列表,最大的特点是通过key来查找其对应的值其时间复杂度是O(1),下面这篇文章就来给大家介绍介绍python利用拉链法实现字典的方法。

前言

字典也叫散列表,最大的特点是通过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 d出值  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 d出元素 并且删除  key_index = hash(key) % self._num  for i,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利用拉链法实现字典方法示例全部内容,希望文章能够帮你解决python利用拉链法实现字典方法示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1202392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存