Python基础学习笔记(十一)——集合
目录
- 一、集合的介绍与创建
- 二、集合的存储原理
- 三、元素的修改
- 1. 添加元素
- 2. 删除元素
- 四、集合的运算
- 五、集合的判定
一、集合的介绍与创建
集合(set
),一种可变、无序、不重复的数据结构,由大括号{}
内、用逗号分隔的一组元素组成。
集合的元素是可变的,即,它支持元素的引用的直接修改,并有相应的操作函数。
与同为组合的序列不同,集合的元素是无序的。这意味着元素的顺序与其添加的顺序无关,并且元素也不再支持索引访问。
集合的访问仅可通过组合的通用操作进行,如:for
循环遍历、成员运算。(见第三篇和第七篇)
集合的元素是不重复的,也就是说,集合可自动对内部的元素进行去重处理。
与序列同理,集合同样有赋值创建和引用创建,对应类似的函数set()
。此外,类似于列表生成式(见第六篇),还支持集合生成(推导)式。
# 直接创建
set_ = {1, 2, 3}
print(set_) # {1, 2, 3}# 引用创建
set_ = set([1, 2, 3])
print(set_) # {1, 2, 3}# 空集
set_ = set()
print(set_) # set()# 集合生成式
set_ = {i**2 for i in range(10) if i%2 == 0}
print(set_) # {0, 64, 4, 36, 16}
二、集合的存储原理
集合通过哈希表来实现存储,即使用散列函数将元素映射到表中的位置。
元素的地址会通过哈希函数计算得到一个定长数字,该数字称为哈希值或散列值。而哈希表是一种根据键的哈希值直接访问存储位置的数据结构,也称为散列表。
不同元素的哈希值可能相同,这就是哈希冲突。当发生冲突时,系统将元素添加到哈希桶的尾部,使其成为链表的节点。
集合的元素不会重复,是因为哈希表的结构会使得相同元素的会映射到同一地址。
三、元素的修改
1. 添加元素
add(element)
:添加一个元素。update(iterable)
:添加一个组合内的元素。
set_ = set()# 单个添加
set_.add('num')
print(set_) # {'num'}# 多个添加
set_.update(range(5))
print(set_) # {0, 1, 2, 3, 4, 'num'}
2. 删除元素
discard(element)
:删除一个指定元素remove(element)
:删除一个指定元素(见第六篇)pop()
:删除一个任意元素(见第六篇)clear()
:清空元素(见第六篇)
后三个函数同样适用于列表的元素删除,语法格式与集合相似,但缺失索引后,其功能范围有所变化。
其中,pop()
的 “任意” 是与哈希值有关的伪随机机制。
set_ = set(range(5)) # {0, 1, 2, 3, 4}# 定向删除
set_.discard(0)
print(set_) # {1, 2, 3, 4}
set_.remove(1)
print(set_) # {2, 3, 4}# 不定向删除
set_.pop()
print(set_) # {3, 4}# 清空
set_.clear()
print(set_) # set()
四、集合的运算
set1.intersection(set2)
:交运算,对应运算符&
,即set1 & set2
set1.union(set2)
:并运算,对应运算符|
,即set1 | set2
set1.difference(set2)
:差运算,对应运算符-
,即set1 - set2
set1.symmetric_difference(set2)
:对称差运算
其中,并运算可用于元素的添加,区别在于:集合的运算返回的是一个新的集合。
set1 = {'c', 'a', 't'}
set2 = {'h', 'a', 't'}# 取交
print(set1.intersection(set2)) # {'t', 'a'}
print(set1 & set2)# 取并
print(set1.union(set2)) # {'t', 'c', 'h', 'a'}
print(set1 | set2)# 取差:从 set1 中去掉 set1&set2 的元素
print(set1.difference(set2)) # {'c'}
print(set1 - set2)# 对称取差:从 set1|set2 中去掉 set1&set2 的元素
print(set1.symmetric_difference(set2)) # {'c', 'h'}
print((set1 | set2) - (set1 & set2))# 地址更改
print(id(set1)) # 2357217208448
print(id(set2)) # 2357217209344
print(id(set1.union(set2))) # 2357217208672
五、集合的判定
set1.isdisjoint(set2)
:判断两集是否存在相同元素set1.issubset(set2)
:判断set1
是否为set2
的子集set1.issuperset(set2)
:判断set1
是否为set2
的超集
以上函数的返回值类型为布尔。
set1 = set('apple')
set2 = set('app')# 无共同元素为真
print(set1.isdisjoint(set2)) # False
# set2 Ↄ set1 为真
print(set1.issubset(set2)) # False
# set1 Ↄ set2 为真
print(set1.issuperset(set2)) # True
相关文章:
Python基础学习笔记(十一)——集合
目录 一、集合的介绍与创建二、集合的存储原理三、元素的修改1. 添加元素2. 删除元素 四、集合的运算五、集合的判定 一、集合的介绍与创建 集合(set),一种可变、无序、不重复的数据结构,由大括号{}内、用逗号分隔的一组元素组成。…...
FineReport
1.FineReport 官网 :FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 下载地址 免费下载FineReport - FineReport报表官网 FineReport是一款用于报表制作,分析和展示的工具。 普通模板:是 FineReport 最常用…...
嵌入式就业前景好么
嵌入式就业前景在当前环境下是较为乐观的,以下是对嵌入式就业前景的详细分析: 广泛应用领域:嵌入式系统广泛应用于智能家居、医疗设备、航空航天等领域。随着物联网(IoT)的快速发展,预计到2024年ÿ…...

为啥找对象千万别找大厂男,还好我不是大厂的。。
网上看到一大厂女员工发文说:找对象千万别找大厂男,理由说了一大堆,无非就是大厂男为了逃避带娃,以加班为由宁愿在工位上玩游戏也不愿回家。当然这种观点有的人赞同有的人反对。 网友精彩评论: --------------下面是今…...
如何查看k8s中service的负载均衡策略
在Kubernetes中,Service的负载均衡策略一般由kube-proxy负责,kube-proxy使用iptables或IPVS规则进行负载均衡。默认情况下,kube-proxy使用的是轮询(Round Robin)策略,但是在使用IPVS模式时,可以…...

Linux-DNS域名解析服务01
BIND 域名服务基础 1、DNS(Domain Name System)系统的作用及类型 整个 Internet 大家庭中连接了数以亿计的服务器、个人主机,其中大部分的网站、邮件等服务器都使用了域名形式的地址,如 www.google.com、mail.163.com 等。很显然…...

[c++刷题]贪心算法.N01
题目如上: 首先通过经验分析,要用最少的减半次数,使得数组总和减少至一半以上,那么第一反应就是每次都挑数组中最大的数据去减半,这样可以是每次数组总和值减少程度最大化。 代码思路:利用大根堆去找数据中的最大值,…...

推荐常用的三款源代码防泄密软件
三款源代码防泄密软件——安秉源代码加密、Virbox Protector 和 MapoLicensor——确实各自在源代码保护的不同方面有其专长。这些软件可以满足企业对于源代码保护的三大需求:防止泄露、防止反编译和防止破解。 安秉源代码加密: 专注于源代码文件的加密&…...

Android 13 高通设备热点低功耗模式(2)
前言 之前写过一篇文章:高通热点被IOS设备识别为低数据模式,该功能仿照小米的低数据模式写的,散发的热点可以达到被IOS和小米设备识别为低数据模式。但是发现IOS设备如果后台无任何网络请求的时候,息屏的状态下过一会,会自动断开热点的连接。 分析 抓取设备的热点相关的…...
web前端任职条件:全面解析
web前端任职条件:全面解析 在当今数字化快速发展的时代,Web前端技术已经成为互联网行业不可或缺的一部分。作为一名Web前端开发者,需要具备哪些任职条件呢?本文将从四个方面、五个方面、六个方面和七个方面为您深入剖析。 四个方…...

分析医药零售数据该用哪个BI数据可视化工具?
数据是企业决策的重要依据,可以用于现代企业大数据可视化分析的BI工具有很多,各有各擅长的领域。那么哪个BI数据可视化工具分析医药零售数据又好又快? 做医药零售数据分析首推奥威BI数据可视化工具! 奥威BI数据可视化工具做医药…...
如何使用芯片手册做软件开发?
在阅读和利用芯片手册进行软件开发时,你应该关注以下几个关键点: 引脚功能:了解芯片上每个引脚的功能,包括它们可以被配置为输入还是输出,以及它们支持的特殊功能,如模拟输入、PWM输出、中断等。 寄存器映…...
基于深度学习的文本翻译
基于深度学习的文本翻译 基于深度学习的文本翻译,通常称为神经机器翻译(Neural Machine Translation, NMT),是近年来在自然语言处理(NLP)领域取得显著进展的技术。NMT通过使用深度神经网络来自动学习和翻译…...

Unity制作透明材质直接方法——6.15山大软院项目实训
之前没有在unity里面接触过材质的问题,一般都是在maya或这是其他建模软件里面直接得到编辑好材质的模型,然后将他导入Unity里面,然后现在碰到了需要自己在Unity制作透明材质的情况,所以先搜索了一下有没有现成的方法,很…...
【HarmonyOS NEXT】如何通过h5拉起应用(在华为浏览器中拉起应用)
华为浏览器支持拉起外部应用 浏览器访问网页经常会遇到deeplink的场景。当前处理方案统一为使用AMS系统能力startAbility去隐式拉起。传递的want参数为 { "actions": "ohos.want.action.viewData", "uri": deeplink链接 } 网页需要给自己的应用拉…...

模板方法模式(大话设计模式)C/C++版本
模板方法模式 C #include <iostream> using namespace std;class TestPaper { public:void TestQ1(){cout << "杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维&qu…...
数据提取:数据治理过程中的质量保障
一、引言 在数字化时代,数据已经成为企业决策和运营的核心资源。然而,数据的价值并不仅仅在于其数量,更在于其质量。数据治理作为确保数据质量、安全性和一致性的重要手段,对于企业的长期发展至关重要。其中,数据提取…...

第55期|GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...

移植案例与原理 - utils子系统之file文件操作部件
Utils子系统是OpenHarmony的公共基础库,存放OpenHarmony通用的基础组件。这些基础组件可被OpenHarmony各业务子系统及上层应用所使用。公共基础库在不同平台上提供的能力: LiteOS-M内核:KV(key value)存储、文件操作、定时器、Dump系统属性。…...

个股期权有哪些股票?金融新手必须知道!
今天带你了解个股期权有哪些股票?在中国的股票市场中,个股期权是一种衍生品,允许投资者购买或卖出特定股票的期权合约。 个股期权有哪些股票? 个股期权是指在特定时间内,以特定价格买入或卖出特定数量的某只个股的权利…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...