文章目录

  • 1.定义哈希转换函数
  • 2.定义哈希表类
    • 2.1.不使用__setitem__
    • 2.2.使用__setitem__

1.定义哈希转换函数

def get_hash(key):hash = 0for char in key:  #遍历key的每一个charhash += ord(char)   #计算所有char的ASCII值的和return hash % 100    #计算hash值
get_hash('march 6')


此处特别强调哈希值的计算过程,后面会将此函数封装到哈希表类中。

2.定义哈希表类

2.1.不使用__setitem__

class HashTable:def __init__(self):self.MAX = 10   #定义哈希表长度为10self.arr = [None for i in range(self.MAX)]   #初始化hash数组全为None#获取哈希值    def get_hash(self,key):   hash = 0      for char in key:hash += ord(char)return hash % self.MAX#将hash值以及对应val放入哈希表中def add(self,key,val):h = self.get_hash(key)self.arr[h] = val#通过key获得对应的val,中间用了一个哈希转换   def get(self,key):h = self.get_hash(key)return self.arr[h]      #返回哈希值在arr中的值

测试:

t = HashTable()        #实例化
t.add('March 1',100)   #添加key、value
t.add('March 2',200)
t.add('March 3',300)
t.add('March 4',400)t.arr     #打印哈希数组
t.get('March 4')  #查找key对应的val

2.2.使用__setitem__

class HashTable:def __init__(self):self.MAX = 10   #定义哈希表长度为100self.arr = [None for i in range(self.MAX)]   #初始化hash数组全为None#获取哈希值    def get_hash(self,key):   hash = 0      for char in key:hash += ord(char)return hash % self.MAX#添加key,valuedef __setitem__(self, key, val):   h =self.get_hash(key)self.arr[h] = val#通过key查valuedef __getitem__(self,key):h = self.get_hash(key)return self.arr[h]#删除某个key(在arr中将其设为None即可)def __delitem__(self,key):h = self.get_hash(key)self.arr[h] = None

测试:

t = HashTable()
t['March 1'] = 100   #添加key,value
t['March 2'] = 200
t['March 3'] = 300
t['March 4'] = 400
t['March 5'] = 500t['March 5']  #查找March 5
t['March 4']  #查找March 4
del t['March 3']   #删除March 3
t.arr   #将发现March 3对应的值变成None

Python数据结构实战——哈希表(HashTable)相关推荐

  1. Python数据结构实战——哈希表中的冲突处理(Collision Handling In Hash Table)

    文章目录 1.定义哈希类(能处理冲突) 2.测试 2.1.增加键值 2.2.查找对应键值 2.3.查看哈希表 2.4.更新值 2.5.删除键值对 1.定义哈希类(能处理冲突) class HashTa ...

  2. Python 数据结构之哈希表的实现

    哈希表(Hash table,也叫作散列表),是根据关键码值(Key value)而直接进行访问的数据结构. 也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做 ...

  3. Python数据结构:哈希表

    哈希 散列(哈希)是电脑科学中一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表) ...

  4. 用c语言实现基本数据结构(哈希表)

    用c语言实现基本数据结构(哈希表) 写这个哈希表总是段错误,找了半天的bug...原来是各种小错误不断,写得很蛋疼. 我是是用数组实现的,数组的最大值定义成的宏.一共只有四个函数,分别为初始化哈希表, ...

  5. 「Redis数据结构」哈希表(Dict)

    「Redis数据结构」哈希表(Dict) 文章目录 「Redis数据结构」哈希表(Dict) @[toc] 一.概述 二.结构 三.哈希冲突 四.链式哈希 五.rehash 六. 渐进式 rehash ...

  6. 在C#中应用哈希表(Hashtable)

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其 ...

  7. 【数据结构】 哈希表 详解

    目录 1. 概念 引入 2. 冲突 2.1 概念 2.2 避免 2.3 冲突-避免-哈希函数设计 2.4 冲突-避免-负载因子调节(重点) 2.5 冲突-解决 2.5.1 闭散列 2.6 冲突-解决- ...

  8. 哈希表(hashtable)的javascript简单实现

    javascript中没有像c#,java那样的哈希表(hashtable)的实现.在js中,object属性的实现就是hash表,因此只要在object上封装点方法,简单的使用obejct管理属性的 ...

  9. C#中哈希表(HashTable)的用法详解

    1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对, ...

最新文章

  1. oracle em 界面乱码,oracle em 按钮乱码解决办法及em网页变成英文
  2. 那些年,程序员用过的行酒令
  3. java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)
  4. Attribute “singleton” must be declared for element type “bean”.
  5. 通过nginx反向代理解决跨域
  6. python利用集合的无重复性_利用Python程序完成ABAQUS中的一些重复性操作
  7. 最简单的视音频播放示例5:OpenGL播放RGB/YUV
  8. 1136 A Delayed Palindrome(20 分)
  9. 序 - 致“正当时”
  10. 逗游怎么安装计算机丢失文件,原神PC版常见安装问题解决方法汇总
  11. Idea中的搜索快捷键
  12. java 网页版通讯_JavaWeb网页聊天室(WebSocket即时通讯)
  13. 【k8s系列5】KubernetesClientException: too old resource version 原因分析
  14. c语言中strcat函数的作用,strcat函数的作用是什么?
  15. Ubuntu18.04 双屏显示 双显卡设置
  16. 如何让U盘同时兼容Windows和Mac OS X系统
  17. Symbian 进行最后一次系统升级,塞班时代结束
  18. 113资讯网(www.113p.cn)评测:护卫神·主机大师 (Linux版)
  19. QQ总是登陆不上,显示(连接服务器超时,请重新登录,错误代码(0*00000001)
  20. PyTorch :YOLOv5实战

热门文章

  1. 魅族技术晚场回顾,算法、架构、AI之外,还要考虑未来
  2. 【李宏毅2020 ML/DL】P11 Logistic Regression | 由逻辑回归中的特征转换巧妙引出“神经网络”的概念
  3. PHP命名空间带来的干扰
  4. (最短路 Floyd diskstra prim)Frogger --POJ--2253
  5. jQuery Event.delegateTarget 属性详解
  6. api k8s restful 创建pods_Kind:一个容器创建K8S开发集群
  7. 全球通用头像gravatar介绍
  8. 浓缩的就是精华——ES6迭代器精炼讲解
  9. 运维架构师-并不遥远的彼岸
  10. 手机恶意软件激增,使用代码签名证书防范恶意侵害