哈希


哈希表

根据key直接进行访问的无序数据结构,复杂度为O(1)

哈希表的实现---字典

初始化

d1 = dict()

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

1、keys()方法

dic = {“a”:1, “d”:0, “e”:3}
print(list(dic.keys()))
#返回由键组成的一个列表
#输出["a", "d", "e"]

2、values()方法

print(list(dic.values()))
#输出[1, 0, 3]

3、items()方法

print(list(dic.items()))
#输出[{"a", 1}, {"d", 0}, {"e", 3}]

4、get()方法

dic = {“a”:1, “d”:0, “e”:3}
print(dic.get("a", 0))
#键a存在,输出对应值1
print(dic.get("z", 0))
#键z不存在,因此输出指定的值0
dic["a"] = dic.get("a", 0) + 1
#修改键值对{"a", 2}
dic["f"] = dic.get("f", 0) + 1
#修改键值对{"f", 1}

5、字典中键的特性

键必须不可变,并且可哈希的(字符串、数字、元组)

可变的数据类型不能作为字典的键(如列表、字典),是不可哈希的

字典的键必须各不相同

计数器类(counter)

​ 作用:特殊哈希表,直接统计变量中出现频率的次数

​ 代码示例

from collections import Counter
#引用库
#继承dict()所有方法,包括keys、value
#cnt统计字符串中所有字符的频率(键为字符,值为该字符出现的频率)
cnt = Counter("aabbcddd")
print(cnt)
#统计元组
cnt = Counter([1, 1, 3, 4, 2, 2, 1])
print(cnt)
#输出值列表
print(list(cnt.values()))

哈希集合


特点

无序集合

1、哈希集合存储不是键-值对,而是进存储数据的值;

2、哈希集合中的值各不相同;

3、哈希集合中的值必须是可哈希的,如列表不可以成为哈希集合中的值;

4、哈希集合是无序的。

初始化
#初始化一个空集合s1
s1 = set()
#初始化一个非空集合s2,集合无序,{}中的元素顺序不重要
s2 = {0, 1, 2, 3, 4}
s3 = set([0, 1, 2, 3, 4, ])
查找
#如果0存在于s中则输出true
if 0 in s:
print(True)
插入(add())与删除(remove())
s.add(5)  #s2 = {0, 1, 2, 3, 4, 5}
s.remove(3) #s2 = {0, 1, 2, 4}
列表与集合之间的转换

1、列表转换为集合

l1 = [1, 2, 2, 3, 4]
s1 = set(l1)
print(s1)
#输出s = {1, 2, 3, 4}

2、集合转换为列表

s2 = {1, 2, 3, 4}
l2 = list(s1)
print(l2)
#输出[1, 2, 3, 4]
比较哈希表和哈希集合
相同点

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

不同点

1、哈希表存储键- 值对,哈希集合仅存储值

2、哈希表中值可以是任意类型的数据,也可以重复,哈希集合是去重的

3、哈希表中的值可以修改,哈希集合中的值不能修改

哈希基础知识学习-python版的更多相关文章

  1. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  2. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  3. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  4. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  5. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  6. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  7. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  8. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  9. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  10. AXAJ基础知识学习

    AXAJ基础知识学习 博客首页 Ajax简介 ajxa全称是Asynchronous Javascript And XML ,就是异步的JS 和XML 通过Ajax可以再浏览器中向服务器发送异步请求, ...

随机推荐

  1. 增补博客 第七篇 python 比较不同Python图形处理库或图像处理库的异同点

    OpenCV.Pillow 和 scikit image OpenCV(OpenCV 是一个强大的计算机视觉库,它提供了各种图像处理和计算机视觉算法的实现,可以处理各种图像和视频数据. 异同点 跨平台 ...

  2. Centos7部署FytSoa项目至Docker——第二步:安装Mysql、Redis

    FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8001/ 先到腾讯云申请一年的云服务器,我买的是一 ...

  3. HTML5画布-小球碰撞

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` HTML5画布-小球碰撞 日期:2017-7-18 阿珏 ...

  4. HBase2版本的修复工具HBCK2

    一.hbase出现的问题 1.元数据表hbase:namespace 不在线 导致查询数据时 master is initing 2.一些表的region一直处于opening状态 3.region ...

  5. 【长文】带你搞明白Redis

    本文使用第一人称来介绍Redis 一.概述 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...

  6. 微信小程序自动化分析_包含执行设备及对应的微信版本

    背景介绍: 微信小程序是基于腾讯自研 X5 内核,不是谷歌原生 webview. 实现方式: 1.小程序自动化sdk,使用自动化sdk,需要有小程序的开发者权限,以及参考的资料较少,2.选择采用app ...

  7. 利用 device_map、torch.dtype、bitsandbytes 压缩模型参数控制使用设备

    为了更好的阅读体验,请点击这里 device_map 以下内容参考 Huggingface Accelerate文档:超大模型推理方法 在 HuggingFace 中有个重要的关键字是 device_ ...

  8. 实验6.交换机MAC地址表简单实验

    # 实验6.交换机Mac地址表 本实验用于验证和测试交换机的Mac地址表的特性. 实验组 测试 测试在PC1没有pingPC2时,此时mac表为空 当PC1ping一个其他的ip而不是PC2时,无论是 ...

  9. Bike Sharing Analysis(一)- 探索数据

    1. Bike Sharing Analysis 在这章主要介绍如何分析共享单车服务数据,以及如何基于时间.天气状态特征来识别单车的使用模式.除此之外,我们还会引入可视化分析,假设检验.以及时间序列分 ...

  10. Linux 内核:sysfs 有关的API

    背景 相关文章:1.sysfs与kobject基类 下面内容基本上参考(有删改):https://blog.csdn.net/qb_2008/article/details/6846412 API a ...