翼度科技»论坛 编程开发 python 查看内容

哈希基础知识学习-python版

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
哈希

哈希表

根据key直接进行访问的无序数据结构,复杂度为O(1)
哈希表的实现---字典

初始化

d1 = dict()
查找
  1. #使用中括号[]进行查找,括号内为特定的键, 键-值
  2. dic = {"a": 1, "d":0, "e":3}
  3. print(dic["a"]) #输出1
  4. print(dic["z"]) #报错
复制代码
修改
  1. dic["a"] = 5
  2. print(dic["a"]) #输出5
复制代码
插入
  1. dic["c"] = 4
  2. #dic更新,字典中多了"c": 4
复制代码
删除
  1. #使用关键字del删除
  2. del dic["a"]
  3. print(dic["a"])
  4. #dic更新,字典中少了"a": 5
复制代码
补充

1、keys()方法
  1. dic = {“a”:1, “d”:0, “e”:3}
  2. print(list(dic.keys()))
  3. #返回由键组成的一个列表
  4. #输出【"a", "d", "e"]
复制代码
2、values()方法
  1. print(list(dic.values()))
  2. #输出[1, 0, 3]
复制代码
3、items()方法
  1. print(list(dic.items()))
  2. #输出[{"a", 1}, {"d", 0}, {"e", 3}]
复制代码
4、get()方法
  1. dic = {“a”:1, “d”:0, “e”:3}
  2. print(dic.get("a", 0))
  3. #键a存在,输出对应值1
  4. print(dic.get("z", 0))
  5. #键z不存在,因此输出指定的值0
复制代码
  1. dic["a"] = dic.get("a", 0) + 1
  2. #修改键值对{"a", 2}
  3. dic["f"] = dic.get("f", 0) + 1
  4. #修改键值对{"f", 1}
复制代码
5、字典中键的特性
键必须不可变,并且可哈希的(字符串、数字、元组)
可变的数据类型不能作为字典的键(如列表、字典),是不可哈希的
字典的键必须各不相同
计数器类(counter)

​        作用:特殊哈希表,直接统计变量中出现频率的次数
​        代码示例
  1. from collections import Counter
  2.         #引用库
  3.         #继承dict()所有方法,包括keys、value
  4.         #cnt统计字符串中所有字符的频率(键为字符,值为该字符出现的频率)
  5.         cnt = Counter("aabbcddd")
  6.         print(cnt)
  7.         #统计元组
  8.         cnt = Counter([1, 1, 3, 4, 2, 2, 1])
  9.         print(cnt)
  10.         #输出值列表
  11.         print(list(cnt.values()))
复制代码
哈希集合

特点

无序集合
1、哈希集合存储不是键-值对,而是进存储数据的值;
2、哈希集合中的值各不相同;
3、哈希集合中的值必须是可哈希的,如列表不可以成为哈希集合中的值;
4、哈希集合是无序的。
初始化
  1. #初始化一个空集合s1
  2. s1 = set()
  3. #初始化一个非空集合s2,集合无序,{}中的元素顺序不重要
  4. s2 = {0, 1, 2, 3, 4}
  5. s3 = set([0, 1, 2, 3, 4, ])
复制代码
查找
  1. #如果0存在于s中则输出true
  2. if 0 in s:
  3.         print(True)
复制代码
插入(add())与删除(remove())
  1. s.add(5)  #s2 = {0, 1, 2, 3, 4, 5}
  2. s.remove(3)  #s2 = {0, 1, 2, 4}
复制代码
列表与集合之间的转换

1、列表转换为集合
  1. l1 = [1, 2, 2, 3, 4]
  2. s1 = set(l1)
  3. print(s1)
  4. #输出s = {1, 2, 3, 4}
复制代码
2、集合转换为列表
  1. s2 = {1, 2, 3, 4}
  2. l2 = list(s1)
  3. print(l2)
  4. #输出[1, 2, 3, 4]
复制代码
比较哈希表和哈希集合

相同点

1、无序; 2、不重复; 3、可哈希的; 4、O(1)复杂度的查找
不同点

1、哈希表存储键- 值对,哈希集合仅存储值
2、哈希表中值可以是任意类型的数据,也可以重复,哈希集合是去重的
3、哈希表中的值可以修改,哈希集合中的值不能修改

来源:https://www.cnblogs.com/piaoduo-yf/p/18176922
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具