初始Python篇(5)—— 集合

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-CSDN博客

所属专栏: Python

目录

集合

相关概念

集合的创建与删除

集合的操作符 

集合的相关操作方法 

集合的遍历 

集合生成式

列表、元组、字典、集合的区别

Python3.11新特性 

结构模型匹配 

字典合并运算符 

同步迭代


集合

相关概念

Python中的集合是一个无序的不重复元素序列。也就是说这个集合是天然的去重容器,学过数据结构的小伙伴应该可以联想到 Set的用法。

集合中只能存储不可变数据类型。例如,整型、字符串、元组等,但像列表、字典等类型是不能够存放的。集合与列表、字典一样,都是Python中的可变数据类型。

集合是序列的一种,因此操作序列的相关方法也可以用来操作集合。

集合的创建与删除

语法:

# 使用{}创建集合
s = {elem1,elem2,...,elemN}# 使用内置函数set()创建集合
s = set(e) # e必须是可迭代的对象

代码演示:

# 1、使用{}创建集合
s = {1,'Hello',('Python',5)}
print(s) # {1, ('Python', 5), 'Hello'}# 2、使用内置函数set创建集合
s = set([1,2,3,4]) # 列表是属于序列,即可迭代的对象
print(s) # {1, 2, 3, 4}s = set('Hello Python')
print(s) # {' ', 'P', 't', 'e', 'n', 'H', 'l', 'h', 'y', 'o'}# 创建空集合
print({}, type({})) # {} <class 'dict'>
print(set(), type(set())) # set() <class 'set'>

从上面的输出结果,我们也可以知道,集合是无序的。 

注意:创建空集合,只能使用 内置函数set ,而不能使用 {} 去创建。 

可迭代对象与序列的关系:序列是可迭代对象的一种。 

集合的删除也是使用 del 关键字:

del 集合名

集合的操作符 

由于Python中的集合与数学中的集合是一个概念,因此集合与集合也有一些操作。例如,交集等。

语法:

A = {e1,e2,...,eN}
B = {elem1,elem2,...,elemN}# 交集
A & B
# 并集
A | B
# 差集
A - B
# 补集
A ^ B

差集的结果是和前面的一个集合的结果有关,即前面一个集合中不在后面一个集合中出现的元素所组成的集合,便是差集。

代码演示:

A = {1,2,3,4,5}
B = {1,3,5,7,9}
# 交集
print(A&B) # {1, 3, 5}
# 并集
print(A|B) # {1, 2, 3, 4, 5, 7, 9}
# 差集
print(A-B) # {2, 4}
# 补集
print(A^B) # {2, 4, 7, 9}

集合的相关操作方法 

方法描述
s.add(x)如果x不在集合s中,则将x添加到集合s
s.remove(x)如果x在集合中,将其删除,如果不在集合中,程序报错
s.clear()清除集合中所有元素

代码演示:

s = {1,2,3,4,5}
s.add(8)
print(s) # {1, 2, 3, 4, 5, 8}
s.remove(3)
print(s) # {1, 2, 4, 5, 8}
s.clear()
print(s) # set()

集合的遍历 

语法:

# 1、使用for循环遍历
for item in s:print(item)# 2、使用enumerate函数遍历
for index,item in enumerate(s):print(index,item)
# index 是序号,可以手动修改的

代码演示:


# 1、通过for循环遍历
s = {1,2,3,4,5}
for item in s:print(item,end=' ')
print()# 2、使用enumerate函数遍历
for index,item in enumerate(s):print(index,'-->',item)
# 0 --> 1
# 1 --> 2
# 2 --> 3
# 3 --> 4
# 4 --> 5

集合生成式

语法:

s = {i for i in range(1,5)}

代码演示:

# 集合生成式
s = {random.randint(1,100) for i in range(1,5)}
print(s) # {34, 2, 82, 7} --> 随机输出的

到现在为止,Python中的数据类型基本上已经学完了。我们现在回过头来看,发现这些数据类型也是有很多的相似之处的。例如,生成式、遍历、可变数据类型的相关操作方法等这些基本上框架都是一样的。这也有利于我们学习记忆。

列表、元组、字典、集合的区别

Python3.11新特性 

结构模型匹配 

虽然Python中没有与C语言、Java那样的switch-case 语句,但在Python3.11之后加入了结构模式匹配,虽不如switch-case那样灵活,但是也是可以避免多重 if-else 造成的可读性差。

data = eval(input('请输入你的成绩:'))
if data < 60:print('你的成绩等级是:E')
elif 60 <= data < 70:print('你的成绩等级是:D')
elif 70 <= data < 80:print('你的成绩等级是:C')
elif 80 <= data < 90:print('你的成绩等级是:B')
elif 90 <= data <= 100:print('你的成绩等级是:A')
else:print('输入错误')

上面是多重 if-else 的语句,下面我们来使用match-case语句:

data = eval(input('请输入你的成绩:'))
match data: # data表示要匹配的数据case _ if data < 60: # _表示匹配任何值,也就是通配符print('你的成绩等级是:E')case _ if 60 <= data < 70:print('你的成绩等级是:D')case _ if 70 <= data < 80:print('你的成绩等级是:C')case _ if 80 <= data < 90:print('你的成绩等级是:B')case _ if 90 <= data <= 100:print('你的成绩等级是:A')case _:print('输入错误')

case 后面的 "_" 是一个通配符,必须写上。

上面是match-case的标准写法, 还有一些简略写法:

对于可以直接匹配的情况:

data = 30
match data:case _ if data == 10:print(data)case _ if data == 20:print(data)case _ if data == 30:print(data)# 上面三种都是标准写法,下面就是更简单的写法case 40: # 这是 data == 40 的简略写法print(40)case 50:print(50)case _: # 上面的都匹配不成功时,会执行这里的print('匹配失败')

如果想要进行范围匹配,例如,上面我们在匹配成绩等级时,这种情况就只能是在 通配符后面加上 if语句 进行判断了。

除了,可以匹配数据之外,还能匹配数据类型。

type = type(eval(input('请输入要匹配的类型:')))match type:case _ if type == str:print('This is a string')case _ if type == int:print('This is an integer')case _ if type == float:print('This is a float')case _ if type == list:print('This is a list')case _ if type == dict:print('This is a dictionary')case _ if type == tuple:print('This is a tuple')case _ if type == set:print('This is a set')case _:print('This is None')

其实只要我们理解最标准的写法, 剩下的也就是使用 if语句去进行判断了。

字典合并运算符 

字典合并运算符使用的是 "|"

代码演示:

d1 = {'cat':'小猫', 'dog':'小狗'}
d2 = {'people':'人类','animal':'动物'}
merge_dict = d1 | d2
print(merge_dict)
print(d1)
print(d2)

运行效果: 

同步迭代

当需要同时遍历多个对象时,就可以使用同步迭代的方式。

代码演示:

list1 = ['dog', 'cat', 'bird', 'fish']
list2 = [1,2,3,4]
# 通过zip函数将两个对象压缩成一份,然后再去遍历这个一份,达到同时遍历两个的效果
for l1,l2 in zip(list1, list2):match l1,l2:case _ if l1 == 'dog' and l2 == 1:print('一只单身狗')case _ if l1 == 'cat' and l2 == 2:print('两个恋爱的小猫')case _ if l1 == 'bird' and l2 == 3:print('一家幸福的三口子')case _ if l1 == 'fish' and l2 == 4:print('四个幸福加倍的一家人')case _:print('匹配失败')

运行效果:

因为这里使用了for循环去遍历,因此最终的效果就是 全部都匹配成功了。

注意:

1、在压缩的过程中,将两个对象中的元素的对应位置进行相互匹配,这里我们使用的是列表,因此最终的匹配都会成功,如果我们使用的是集合这种无序的数据结构去存储的话,就可能会匹配失败。

2、当压缩的对象的元素个数不相等时,是以元素个数少的对象作为基准来进行压缩的,后面的就会自动舍弃。例如,当一个对象有5个元素,另一个对象有10个元素,那么最终压缩的结果就是以5个元素为基准。

好啦!本期 初始Python篇(5)—— 集合 的学习之旅就到此结束啦!我们下一期再一起学习吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10650.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

探索Python的Shell力量:Plumbum库揭秘

文章目录 探索Python的Shell力量&#xff1a;Plumbum库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;Plumbum是什么&#xff1f;第三部分&#xff1a;如何安装Plumbum&#xff1f;2. 创建管道3. 重定向4. 工作目录操作5. 前台和后台执行 第五部分&#xff1a;场景应用…

大模型时代,算法岗到底哪个最有前景?什么样的算法工程师更吃香?

毫无疑问&#xff0c;全栈型的算法工程师将更为抢手&#xff0c;如果你精通大模型从训练到应用的整个流程&#xff0c;你走到哪里都不怕。 但往往人的精力有限&#xff0c;如果从数据、预训练、微调、对齐、推理、应用几个方面来看的话&#xff0c;个人觉得 “预训练>数据&…

Linux系统之sleep命令的基本使用

Linux系统之sleep命令的基本使用 一、sleep命令介绍二、sleep的使用帮助2.1 查看帮助信息2.2 基本语法 三、sleep命令的基本使用3.1 指定暂停时间长度3.2 结合多个时间单位 四、在脚本中应用五、注意事项 一、sleep命令介绍 sleep命令是一个在Unix和类Unix操作系统中常见的命令…

《Java核心技术 卷I》Swing处理2D图形

处理2D图形 Java1.0开始&#xff0c;Graphics类就包含绘制直线、矩形和椭圆等方法&#xff0c;但是绘制图形的操作能力有限&#xff0c;我们将使用Java2D的图形库。想绘制需要获得Graphics2D类的一个对象&#xff0c;是Graphics的子类。paintCompoent方法接收一个2D类对象&…

MySQL:客户端工具创建数据库

MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;用于存储、管理和检索数据。MySQL是基于SQL语言的&#xff0c;它具有高效、可靠、易用的特点。 客户端工具 这个mysqld.exe就在计算机安装的数据可服务&#xff0c;启动之后&#xff0c;mys…

【Python】计算机视觉应用:OpenCV库图像处理入门

计算机视觉应用&#xff1a;OpenCV库图像处理入门 在当今的数字化时代&#xff0c;计算机视觉&#xff08;Computer Vision&#xff09;已经渗透到各行各业&#xff0c;比如自动驾驶、智能监控、医疗影像分析等。而 Python 的 OpenCV 库&#xff08;Open Source Computer Visi…

万字长文详解JavaScript基础语法--前端--前端样式--JavaWeb

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张带来的前端教程的第三期&#xff1a;JavaScript 文章目录 4.JavaScript4.1 JS简介4.1.1 JS起源4.1.2 JS 组成部分4.1.3 JS的引入方式 4.2 JS的数据类型和运…

医学图像算法之基于Unet的视网膜血管分割

第一步&#xff1a;准备数据 视网膜血管分割数据比较少&#xff0c;但效果好&#xff0c;总共40张 第二步&#xff1a;搭建模型 UNet主要贡献是在U型结构上&#xff0c;该结构可以使它使用更少的训练图片的同时&#xff0c;且分割的准确度也不会差&#xff0c;UNet的网络结构…

深度剖析JUC中LongAdder类源码

文章目录 1.诞生背景2.LongAdder核心思想3.底层实现&#xff1a;4.额外补充 1.诞生背景 LongAdder是JDK8新增的一个原子操作类&#xff0c;和AtomicLong扮演者同样的角色&#xff0c;由于采用AtomicLong 保证多线程数据同步&#xff0c;高并发场景下会导致大量线程同时竞争更新…

Python(PySimpleGUI 库)

PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、Qt、WxPython 等&#xff09;&#xff0c;提供了简单易用的 API。PySimpleGUI 包含了大量的控件&#xff08;也称为小部件或组件&#xff09;&#xff0c;这些控…

LangChain学习心得总结

大模型开发遇到的问题及langchain框架学习 背景&#xff1a; 1、微场景间跳转问题&#xff0c;无法实现微场景随意穿插 2、大模型幻读&#xff08;推荐不存在的产品、自己发挥&#xff09; 3、知识库检索&#xff0c;语义匹配效果较差&#xff0c;匹配出的结果和客户表述的…

Linux基础(十二)——文件与文件系统的压缩、打包和备份

文件与文件系统的压缩、打包和备份 1.压缩1.1 压缩方法及其后缀1.2 gzip1.3 bzip21.4 xz 2.打包3.XFS文件系统备份与还原4.镜像文件创建&#xff08;mkisofs&#xff09; 1.压缩 1.1 压缩方法及其后缀 我们知道在 Linux 下面的扩展名是没有什么很特殊的意义的&#xff0c; 不…

简简单单的UDP

前言 上一篇了解了TCP的三次握手过程&#xff0c;目的、以及如何保证可靠性、序列号与ACK的作用&#xff0c;最后离开的时候四次挥手的内容&#xff0c;这还只是TCP内容中的冰山一角&#xff0c;是不是觉得TCP这个协议非常复杂&#xff0c;这一篇我们来了解下传输层另外一个协…

MLMs之OmniGen:OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略

MLMs之OmniGen&#xff1a;OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇论文介绍了OmniGen&#xff0c;一个用于统一图像生成的扩散模型。论文的核心要点可以总结如下&#xff1a; >> 背景痛点&#xff1a; ● 图像生成领…

LeetCode 143.重排链表

题目&#xff1a; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际…

Linux进程信号(信号的产生)

目录 什么是信号&#xff1f; 信号的产生 信号产生方式1&#xff1a;键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…

【C++】STL— stack的常见用法和模拟实现

目录 1、stack的介绍 2、stack的使用 构造一个空栈 stack的简单接口应用 3、stack的模拟实现 4、栈的相关题目 4.1 最小栈 4.1.2思路 4.1.3 实现代码 4.2 栈的压入、弹出序列 4.2.2 思路 4.2.3程序实现 1、stack的介绍 在C中&#xff0c;stack是一种标准模板库&am…

神书《从零构建大模型》分享,尚未发布,GitHub标星22k!!

《从零构建大模型》是一本即将于今年10月底发布的书籍&#xff0c;github已经吸引了惊人的21.7k标星&#xff01;作者是威斯康星大学麦迪逊分校的终身教授&#xff0c;在GitHub、油管、X上拥有大量粉丝&#xff0c;是一位真正的大佬。 本书免费获取地址 在本书中&#xff0…

【深度学习目标检测|YOLO算法2】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析...

【深度学习目标检测|YOLO算法2】YOLO家族进化史&#xff1a;从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析… 【深度学习目标检测|YOLO算法2】YOLO家族进化史&#xff1a;从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析… 文章目录 【深度学习目标检测|YOL…

动态避障-图扑自动寻路 3D 可视化

自动寻路是机器人导航的核心技术&#xff0c;其原理主要涉及机器人与环境之间的复杂信息交互与处理。在自动寻路过程中&#xff0c;机器人依靠先进的传感器系统&#xff0c;如高清摄像头、精密激光雷达和灵敏超声波装置&#xff0c;全方位感知周围环境。这些传感器能够实时捕捉…