[Python学习日记-19] 细讲数据类型——集合

devtools/2024/9/23 18:31:30/

[Python学习日记-19] 细讲数据类型——集合

简介

集合的创建

集合的增删查

集合的循环

集合的去重

集合的关系运算

简介

        在前面我们学习到了列表、元组、字符串、字典这几种数据类型,在 Python 中还有最后一种数据类型,那就是集合,下面我们一起来看一下这种数据类型究竟是怎么回事吧

定义:集合跟我们学的列表有点像,也是可以存一堆数据,其是一种无序、可变且不重复的数据类型,不过它有几个独特的特点,令其在整个 Python 中占有一席之地

特性:

  1. 里面的元素不可变,代表你不能存一个 list、dict 在集合里,而字符串、数字、元组等不可变类型可以存
  2. 天生去重,在集合里没办法存重复的元素
  3. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,例如集合 {3,4,5} 和 {3,5,4} 算作同一个集合

        基于上面的特性,我们可以用集合来干2件事,一是去重,二是关系运算

集合的创建

        下面我们先来学习一下集合是如何创建的,前面提到集合是没办法存重复的元素的,那我们通过代码来验证一下是否如此,代码如下

python">a = {1,2,3,4,2,"Jove",3,"rain","Jove"}
print(a)

 代码输出如下: 

         由于它是天生去重的,重复的值根本存不进去

集合的增删查

        在 Python 中,集合内存储的都是一些不可变的数据类型,例如字符串、数字、元组等,但是集合本身是一种可变的数据类型,可以执行增加、删除、修改和查询操作。

一、增

python">a = {1, 2, 3, 4, "rain", "Jove"}
a.add("Kerry")
a.add("Jove")    # 加入了重复的元素不会有返回提示
a.add([1,2,3])    # 加入可变类型将会报错 ——> unhashable type (该类型无法被 hash)

代码输出如下: 

 

        从上面的代码输出可以看出集合是无序的,它并不像列表一样可以指定加载前面或者后面,位置完全随机,下面我们再加入一个“Kerry1”看看它这次又加到了那里了

        这次又加到了中间位置,从现象可以看出集合真的是一个无序的数据集合 

二、删

1、指定删除(discard)

python">a = {1, 2, 3, 4, "rain", "Jove"}
a.discard("rain")    # 删除一个存在的值
a.discard("rain2")    # 如果这个值不存在将不会有任何操作

 代码输出如下:

 

2、指定删除(remove)

python">a = {1, 2, 3, 4, "rain", "Jove"}
a.remove("rain")    # 删除一个存在的值和 discard() 相同
a.remove("rain2")    # 与 discard() 不同的是,如果这个值不存在将会报错

代码输出如下:

 

3、随机删除(少用或特定场景使用)

python">a = {1, 2, 3, 4, "rain", "Jove"}
a.pop()    # 删除并返回

代码输出如下: 

        在你实际操作时你会发现,它不是按顺序删的吗?其实不然,现在只不过是你数据量太少,当数据量上万或者几十万是它就是随机删的了 

4、清空

python">a = {1, 2, 3, 4, "rain", "Jove"}
a.clear()

代码输出如下:  

三、查

python">a = {1, 2, 3, 4, "rain", "Jove"}
print("Jove" in a)

 代码输出如下:

注意:集合的切片也是不允许的,如果强行切片会报错 

集合的循环

        集合的循环和列表是一致的,如果熟悉列表的操作这个应该是得心应手的

python">a = {1, 2, 3, 4, "rain", "Jove"}
for i in a:print(i)

  代码输出如下:

 

集合的去重

        帮列表去重最快速的办法是什么?就是把它转成集合,去重完,再转回列表来实现。代码如下

python">a = [1,2,3,4,2,"Jove",3,"rain","Jove"]
a = list(set(a))    # set() 就是将列表 a 强制转换为集合,一句代码搞定

 代码输出如下: 

集合的关系运算

         我们来举个例子,有两门课程,一门是 py 另一门是 web,有的学生及学了 py 又学了 web 那我们怎么才可以把及学了 py 又学了 web 的学生都取出来呢?我们先看列表是如何实现的

python">py = ["张三","李四","王五","吴六","Jove","Kerry","Lucy"]
web = ["Jove","Mary","张飞","李四","Jack"]both = []
for i in py:if i in web:both.append(i)print(both)

代码输出如下:  

 

        可以看得出使用列表来实现相对复杂,而且要遍历两个列表,如果列表数据有上万条那么多那这个遍历过程将会相当漫长。其实关系运算有四种形式:交集、并集、差集、对称差集,而上面的就是交集,下面我们来看看集合是如何实现这四种形式的

一、集合的交集、并集、差集、对称差集

1、交集

        交集只会把两个集合中都有的元素显示出来

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py & web)    # 交集,elements in both set
print(py.intersection(web))
print(py.intersection_update(web))    # 把结果赋值给 py

代码输出如下: 

        可以看得出使用集合来实现交集比用列表来实现简单高效得多

2、并集(合集) 

        并集会把两个集合加在一起,有多项相同的元素将会只留下一个

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py | web)    # 并集 or 合集
print(py.union(web))
print(py.update(web))    # 把结果赋值给 py

代码输出如下: 

3、差集

        差集会以前面一项为主显示

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py - web)    # 差集,only in py
print(py.difference(web))
print(py.difference_update(web))    # 把结果赋值给 py
print(web - py)    # 差集,only in web
print(web.difference(py))
print(web.difference_update(py))    # 把结果赋值给 web

代码输出如下: 

 

4、对称差集

        对称差集会把两个集合里面都有的元素剔除掉

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py ^ web)    # 对称差集,把脚踏2只船的人踢出去
print(py.symmetric_difference(web))
print(py.symmetric_difference_update(web))    # 把结果赋值给 py

代码输出如下:  

二、集合的关系判断

        两个集合之间一般有三种关系,相交、包含、不相交

1、相交

        相交是2个集合有相同的元素即为相交,否则为不相交 

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.isdisjoint(web))    # 判断2个集合是不是不相交,返回 True 或 False

代码输出如下:  

2、包含

         包含是1个集合有另1个集合的全部元素

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.issubset(web))    # 判断 py 是不是 web 的子集,返回 True 或 False

 代码输出如下:  

3、不相交

        不相交是2个集合没有1个元素相同 

python">py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.issuperset(web))    # 判断 py 是不是 web 的父集,返回 True 或 False

  代码输出如下:


http://www.ppmy.cn/devtools/111816.html

相关文章

【安全漏洞】Java-WebSocket 信任管理漏洞

发布厂商: org.java-websocket 组件名称: Java-WebSocket 版本号: 1.3.7 漏洞影响版本: 1.3.7 - 1.4.1 组件风险等级: 高危 组件路径: [xxx.jar/BOOT-INF/lib/Java-WebSocket-1.3.7.jar] CVE编号: CVE-2020-11050 CNNVD编号: CNNVD-202005-296 漏洞名称: Java…

【拥抱AI】浅谈Prompt的书写规范及要点

Prompt是什么? Prompt是一种技术,它通过自然语言处理来引导用户与机器之间的交互。在人工智能领域,Prompt通常用于生成文本,例如对话系统、机器翻译和文本摘要等应用。它也用于训练模型,以使其能够理解和生成人类语言…

python学习第八节:爬虫的初级理解

python学习第八节:爬虫的初级理解 爬虫说明:爬虫准备工作:分析网站url分析网页内容 爬虫获取数据:1.使用urllib库发起一个get请求2.使用urllib库发起一个post请求3.网页超时处理4.简单反爬虫绕过5.获取响应参数6.完整请求代码 解析…

嵌入式鸿蒙系统开发语言与开发方法分析

大家好,今天主要给大家分享一下,HarmonyOS系统的主力开发语言ArkTS语言开发方法,它是基于TypeScript(简称TS)语言扩展而来。 第一:ArkTS语言基本特性 目的:声明式UI,让开发者以更简洁,更自然的方式开发高性能应用。 声明式 UI基本特性: 基本UI描述:ArkTS定义了各种装饰…

Python计算机视觉 第8章-图像内容分类

Python计算机视觉 第8章-图像内容分类 8.1 K邻近分类法(KNN) 在分类方法中,最简单且用得最多的一种方法之一就是 KNN(K-Nearest Neighbor ,K邻近分类法),这种算法把要分类的对象(例如一个特征…

雷电9模拟器安装magisk和lsposed

模拟器环境配置 1、开启root 2、开启System.vmdk可写入 安装magisk 1、新建模拟器、开启root权限、并安装debug版magisk 下载地址去上面吾爱论坛作者文章下载吧!支持他一下! 2、打开magisk的app,点击安装 如果弹出获取权限,直接…

批量复制指定文件夹——EXCEL VBA 实现

工作中往往需要复制特定文件夹,例如,一个文件夹中有100个文件夹,我只需要复制其中50个文件夹,这50个文件夹的名字放入excel表中第一列,从第二行开始(注意:第一行的表头不能覆盖)&…

《深度学习》PyTorch 手写数字识别 案例解析及实现 <上>

目录 一、了解MINIST数据集 1、什么是MINIST 2、查看MINIST由来 二、实操代码 1、下载训练数据集 2、下载测试数据集 运行结果: 3、展示手写数字图片 运行结果: 4、打包图片 运行结果: 5、判断当前pytorch使用的设备 1&#xff…