Python之哈希表-哈希表原理
Python之哈希表-哈希表原理
集合Set
- 集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。
- Python中,它是可变的、无序的、不重复的元素的集合
初始化
- set() -> new empty set object
- set(iterable) -> new set object
元素性质
- 去重:在集合中,所有元素必须相异
- 无序:因为无序,所以不可索引
- 可哈希:Python集合中的元素必须可以hash,即元素都可以使用内建函数hash
- 目前学过不可hash的类型有:list、set、bytearray
- 可迭代:set中虽然元素不一样,但元素都可以迭代出来
增加
- add(elem)
- 增加一个元素到set中
- 如果元素存在,什么都不做
- update(*others)
- 合并其他元素到set集合中来
- 参数others必须是可迭代对象
- 就地修改
删除
- remove(elem)
- 从set中移除一个元素
- 元素不存在,抛出KeyError异常。为什么是KeyError?
- discard(elem)
- 从set中移除一个元素
- 元素不存在,什么都不做
- pop() -> item
- 移除并返回任意的元素。为什么是任意元素?
- 空集返回KeyError异常
- clear()
- 移除所有元素
修改
- 集合类型没有修改。因为元素唯一。如果元素能够加入到集合中,说明它和别的元素不一样。
- 所谓修改,其实就是把当前元素改成一个完全不同的元素,就是删除加入新元素。
索引
- 非线性结构,不可索引。
set() # 空集
{}, type({}) # 空字典
# 返回结果:({}, dict)
set(range(5)), {1, 2, 'abc'}, set((1, 2, 3)), {*range(5), *[1, 2, 3]}
# 集合 集合是去重的,根据此例体会一下。
# 返回结果:({0, 1, 2, 3, 4}, {1, 2, 'abc'}, {1, 2, 3}, {0, 1, 2, 3, 4})
{'1', 1, '1', 1, 2}, {1, (1,), 1, (1,)}
# 集合是无序的 去重
# 返回结果:({'1', 1, 2}, {(1,), 1})
{1, *'abc', *(1, 2), *[1]}
# 不可哈希的可以解构
# 返回结果:{1, 2, 'a', 'b', 'c'}
{1, (1,), (), '', b'', None, True, False, range(5)}
# 集合中可放的值
# 返回结果:{'', (), (1,), 1, False, None, b'', range(0, 5)}
set(range(5))
# 这个是把range对象给set集合使用
# 返回结果:{0, 1, 2, 3, 4}
list(range(5))
# 这个是把range对象给list列表使用
# 返回结果:[0, 1, 2, 3, 4]
{range(5)}
# 这个得作用是集合中放了一个range对象,但是没有使用
# 返回结果:{range(0, 5)}
x = set()
x
# x等于一个空集
# 返回结果:set()
x.add(1)
x
# 集合中增加元素
# 返回结果:{1}
x.add('abc')
x
# 集合中增加元素
# 返回结果:{1, 'abc'}
x.add(1)
x
# 体会去重的概念
# 返回结果:{1, 'abc'}
x.update(range(3), 'abc')
x
# 相当于把括号中的元素都拿出来加入到x集合中
# 返回结果:{0, 1, 2, 'a', 'abc', 'b', 'c'}
x.update([1, 'abc', 2, 'xyz'])
# x.update却成功的添加到x集合中,思考一下为什么,可以翻到最下方的报错中有一个报错是x.add报错。
x
# 返回结果:{0, 1, 2, 'a', 'abc', 'b', 'c', 'x', 'xyz'}
- 因为add是把整个列表都加到集合中,因为列表不可哈希所以加不进去
- update是把列表中的所有内容,依次拿出添加到x集合中,所以可以加入
hash(1), hash('abc')
# 判断能不能哈希,可以使用hash函数进行测试一下
# 返回结果:(1, -2803511482477406815)
x.remove('a')
x
# 删除
# 返回结果:{0, 1, 2, 'abc', 'b', 'c', 'x', 'xyz'}
x.clear()
# clear清空集合,慎用!!!
x.pop()
# 弹出
# 返回结果:0
x.discard(-1)
# discard 如果删除的值没有,不会报错
-1 in x
# -1在不在x中,返回值True或False
# 返回结果:False
'abc' in x
# 'abc'在不在x中,返回值True或False
# 返回结果:True
报错
{1, 'abc', (1, 2), [1]}
# 列表不可哈希
# 返回结果:TypeError: unhashable type: 'list'
{1, {}}
# 字典不可哈希
# 返回结果:TypeError: unhashable type: 'dict'
{{1}}
# 集合也不可哈希
# 返回结果:TypeError: unhashable type: 'set'
{{1}, [1], {}}
# 集合中不能放的元素
x.add([1, 'abc', 2, 'xyz'])
# x.add提示列表不可哈希
# 返回结果:TypeError: unhashable type: 'list'
hash([])
# 列表不可哈希
# 返回结果:TypeError: unhashable type: 'list'
x.remove(-1)
# 哈希表是无序的,不能使用-1,Key唯一的不重复的
# 返回结果:KeyError: -1
相关文章:

Python之哈希表-哈希表原理
Python之哈希表-哈希表原理 集合Set 集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。Python中,它是可变的、无序的、不重复的元素的集合 初始化 set() -> new empty set objectset(iterable) -> new set …...

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例
标题sql server2014如何添加多个实例 前提(已安装sql server2014 且已有默认实例MSSQLSERVER) 添加新的实例 其实就是根据安装步骤再安装一次(区别在过程中说明) 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…...
C++ 智能指针常用总结
C 智能指针常用总结 文章目录 C 智能指针常用总结1. 写在对前面2. why 智能指针3. what 智能指针3.1 unique_ptr3.2 shared_ptr3.3 weak_ptr 3. how 指针指针3.1 unique_ptr3.1.1 创建3.1.2 成员函数 3.2 shared_ptr3.2.1创建3.2.2 成员对象 3.3 weak_ptr 4. 碎碎念5.参考资料 …...
OracleRAC 安装配置过程中的问题
OS RHAS 3.2 DB 9204 在RAC的安装配置过程中,虽然是严格仔细按照文档来实施,但还是出现不少问题,现整理出来。 现象一 : 在节点一安装数据库的时候出现以下错误 [oraclerac1 dbs]$ sqlplus "/nolog"SQL*Plus: Relea…...

基于战争策略优化的BP神经网络(分类应用) - 附代码
基于战争策略优化的BP神经网络(分类应用) - 附代码 文章目录 基于战争策略优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.战争策略优化BP神经网络3.1 BP神经网络参数设置3.2 战争策略算法应用 4.测试结果…...

K8s 概念及组件
K8s 的全称为Kubernetes,是一种开源的容器编排平台,用于自动化部署以及扩展和管理容器化的应用程序,它提供了一种容器编排和管理的方式,可以帮助开发人员更轻松的管理容器化的应用程序,并且提供了一种跨多个主机的自动…...

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin
我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了,我在网上试了很多方法都没有效果,折让小编我很是苦恼,不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本…...

计算机网络-计算机网络体系结构-网络层
目录 一、IPV4 IP数据报格式 *IP 数据报分片 *IPV4地址 分类 网络地址转换(NAT) 二、子网划分与子网掩码 *CIDR *超网 协议 ARP协议 DHCP协议 ICMP协议 三、IPV6 格式 IPV4和IPV6区别 地址表示形式 四、路由选择协议 RIP(路由信息协议) OPSF(开发最短路径优…...

60 最长有效括号
最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s "(()" 输出࿱…...
第17章 MQ(二)
17.11 RabbitMQ如何保证消息的顺序性 难度:★★ 重点:★★★ 白话解析 其实RabbitMQ是一个先进先出的队列,只要消息进入到队列之后那肯定是顺序的,其实这道题问的点就是在消息进队列之前和出队列之后如何保证顺序性。 1、要保证消息进队列的顺序性实际只需要保证生产者只…...
AV1 视频编码标准资源
AV1 视频编码标准资源 A Progress Report: The Alliance for Open Media and the AV1 Codec Alliance for Open Media(开放媒体联盟/AV1官网) aomanalyzer AOM ANALYZER TEST CLIPS(测试视频) (Download each of the the CIF clips found there, in YUV4MPEG (y4m) format…...

pycharm远程连接miniconda完整过程,以及遇到的问题解决
问题1:no-zero exit code(126) env: ‘/home/user2/miniconda3/envs/ihan/bin/python3’: Too many levels of symbolic links Python interpreter process exited with a non-zero exit code 126 因为选择的新建导致太多软连接,先在服务器上建好虚拟环…...

leetcode:2678. 老人的数目(python3解法)
难度:简单 给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息,信息用长度为 15 的字符串表示,表示方式如下: 前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的年…...

【马蹄集】—— 概率论专题:第二类斯特林数
概率论专题:第二类斯特林数 目录 MT2224 矩阵乘法MT2231 越狱MT2232 找朋友MT2233 盒子与球MT2234 点餐 MT2224 矩阵乘法 难度:黄金 时间限制:5秒 占用内存:128M 题目描述 输入两个矩阵,第一个矩阵尺寸为 l…...
spring中基础核心接口总结
理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口 重要的实现类有:XmlBeanFactory,以及ApplicationContext接口下的类 2.Resource接口,可以通用地访问文件资源 1)ClassPathResource:读取…...

最新Tuxera NTFS2024破解版mac读写NTFS磁盘工具
Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下,MacOSX只能实现对NTFS的读取功能,Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2024完美兼容最新版本的MacOS 11 Big Sur,在M1芯片…...

【标准化封装 SOT系列 】 E SOT-89
〇、SOT-89 这个封装也比较常见,但并不易错。 一、E部分 SOT-89 参数 pin-pin 间距1.5mm body size 4.52.5 二、符合当前标准的典型举例 名称pin 数厂家 body DE矩形 (mm)SOT-894Mini-Circuits – PGA-102 — 4.39/4.62.29/2.59 上图 MiniCircuits 也称DF78…...

【建立单链表:头插法,尾插法;循环列表,带尾指针的循环链表合并(将Tb合并在Ta之后)】
文章目录 一、单链表的基本操作的实现1.建立单链表:头插法----元素插入在链表头部,也叫头插法。2.建立单链表:尾插法----元素插入在链表尾部,也叫尾插法。 二、线性表的链式表示和实现1.循环列表2.带尾指针的循环链表合并…...
图论+线性基高斯消元与主元:1019T2 / P4151
http://cplusoj.com/d/senior/p/SS231019B 相当于图上选一条链和一堆环 考虑dfs生成树。 则链是两条从根出发的链 环是每条返祖边组成的环 所以环和链的异或和可以求出来 链的放到线性基里 然后线性基通过高斯消元求主元(贪心思想,主元可以令那一位…...

Django REST Framework完整教程-RESTful规范-序列化和反序列数据-数据视图
文章目录 1.简介及安装2.案例模型2.1.创建模型2.2.安装mysql必要组件2.3.管理后台转中文2.4.启动后台 3.数据序列化4.RESTful规范4.1.协议、域名和版本4.2.uri(统一资源标识符)4.3.查增删改4.4.过滤信息(Filtering)4.5.状态码(Status Codes&a…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...