当前位置: 首页 > news >正文

Python序列之集合

系列文章目录

  1. Python序列之列表
  2. Python序列之元组
  3. Python序列之字典
  4. Python序列之集合(本篇文章)

Python序列之集合

  • 系列文章目录
  • 前言
  • 一、集合是什么?
  • 二、集合的操作
    • 1.集合的创建
      • (1)使用`{}`创建
      • (2)使用`set()`函数创建
    • 2.集合元素的添加
      • (1)使用`add()`添加单个元素
      • (2)使用`update()`批量添加元素
    • 3.集合元素的删除
      • (1)使用`remove()`删除指定元素
      • (2)使用`discard()`删除指定元素
      • (3)使用`clear()`清空整个集合
      • (4)使用`pop()`随机弹出一个元素
    • 4.使用集合去重(重要应用)
    • 5.集合的数学运算
      • (1)交集
      • (2)并集
      • (3)差集(补集)
      • (4)对称差集
      • (5)判断是否为子集、母集
  • 总结


前言

前面我们已经讲了Python中的列表:Python序列之列表、元组:Python序列之元组和字典:Python序列之字典。今天我们再来看一下Python中另一种序列——集合。

集合这个词大家肯定不陌生,高中数学必修一第一章,便是集合。你应该还记得数学老师说过:“集合具有三个性质:确定性、互异性、无序性”,Python中的集合set便是借鉴了数学中的这种“数据结构”。同样满足这三个性质。

不仅如此,Python还提供的数学中集合的各种运算:求并集、求交集、求补集……

一、集合是什么?

集合是无序可变的,元素不能重复,故经常用集合来实现数据去重。实际上,集合底层是字典实现,集合的所有元素都是字典中的"键对象",因此是不能重复的且唯一的。
在这里插入图片描述

二、集合的操作

1.集合的创建

(1)使用{}创建

a = {3, 5, 7}
b = {}  # 创建一个空集合
c = {3}  # 只有一个元素的集合
print(a)  # 输出:{3, 5, 7}
print(b)  # 输出:{}
print(c)  # 输出:{3}

(2)使用set()函数创建

a = ['a', 2, True]
b = set(a)
c = set()  # 创建一个空集合print(b)  # 输出:{True, 'a', 2}
print(c)  # 输出:set()
print(type(b))  # 输出:<class 'set'>
print(type(c))  # 输出:<class 'set'>

由上面的两个例子可知,Python对空集合的打印表示有两种:{}set()

2.集合元素的添加

(1)使用add()添加单个元素

a = {10, 20, 30}
a.add('a')
print(a)  # 输出:{10, 'a', 20, 30}

(2)使用update()批量添加元素

a = {10, 20, 30}
b = [True, False, 999]
a.update(b)
print(a)  # 输出:{False, True, 999, 10, 20, 30}

3.集合元素的删除

(1)使用remove()删除指定元素

a = {10, 20, 30, 40, 50}
a.remove(30)
print(a)  # 输出:{50, 20, 40, 10}
a.remove(999)  # 报错:KeyError: 999

可以发现,当试图用remove()移除一个集合中并不存在的元素时,解释器会报错。这种反应过于暴力,因此有了更加温柔且绅士的删除方法——discard()

(2)使用discard()删除指定元素

a = {10, 20, 30, 40, 50}
a.remove(30)
print(a)  # 输出:{50, 20, 40, 10}
a.discard(999)  # 无报错
print(a)  # 输出:{50, 20, 40, 10}

当试图删除一个集合中并不存在的元素时,discard()并不会报错,而是什么都不干,程序照常往下运行,优雅且绅士~

(3)使用clear()清空整个集合

a = {10, 20, 30, 40, 50}
a.clear()
print(a)  # 输出:set()

(4)使用pop()随机弹出一个元素

a = {10, 20, 30, 40, 50}
b = a.pop()
print(b)  # 输出:50
print(a)  # 输出:{20, 40, 10, 30}

4.使用集合去重(重要应用)

我们可以充分利用集合的互异性来实现列表元素的去重:

a = [1, 1, 5, 6, 6, 8, 9, 8, 6]
b = set(a)
print(b)  # 输出:{1, 5, 6, 8, 9}

5.集合的数学运算

像数学中概念一样,Python对集合也提供了并集、交集、差集等运算。
在这里插入图片描述

(1)交集

在这里插入图片描述

下面展式了三种取交集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a & b  # 方法一:&
print(c)  # 输出:{2, 3}d = a.intersection(b)  # 方法二:取交集并返回一个新集合
print(d)  # 输出:{2, 3}print(a)  # 输出:{1, 2, 3, 4}
a.intersection_update(b)  # 方法三:取交集并更新原集合
print(a)  # 输出:{2, 3}

(2)并集

在这里插入图片描述
下面展式了两种取并集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a | b  # 方法一:|
print(c)  # 输出:{1, 2, 3, 4, 99, 100, 'yyy'}d = a.union(b)  # 方法二:union()
print(d)  # 输出:{1, 2, 3, 4, 99, 100, 'yyy'}

(3)差集(补集)

在这里插入图片描述

下面展式了三种取差集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a - b  # 方法一:-
print(c)  # 输出:{1, 4}d = a.difference(b)  # 方法二:取交集并返回一个新集合
print(d)  # 输出:{1, 4}print(a)  # 输出:{1, 2, 3, 4}
a.difference_update(b)  # 方法三:取交集并更新原集合
print(a)  # 输出:{1, 4}

注意:差集是有方向性的,A-B ≠ B-A

(4)对称差集

在这里插入图片描述

python集合set内置方法symmetric_differece(),可以用来返回两个集合(或调用对象集合与其它可迭代对象iterable)中非共同的元素组成的新集合set。

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a ^ b  # 方法一:^
print(c)  # 输出:{1, 99, 100, 'yyy', 4}d = a.symmetric_difference(b)  # 方法二:取对称差并返回一个新集合
print(d)  # 输出:{1, 99, 100, 4, 'yyy'}print(a)  # 输出:{1, 2, 3, 4}
a.symmetric_difference_update(b)  # 方法三:取对称差并更新原集合
print(a)  # 输出:{1, 99, 100, 4, 'yyy'}

(5)判断是否为子集、母集

方法用途
a.issubset(b)判断a是否为b的子集
a.issuperset(b)判断a是否为b的母集
a.isdisjoint(b)判断ab的交集是否为空集
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
c = {1, 2, 'yyy'}
d = {'a', 'b', 'c'}print(a.issubset(b))  # 输出:True
print(a.issubset(c))  # 输出:Falseprint(b.issuperset(a))  # 输出:Trueprint(a.isdisjoint(c))  # 输出:False
print(a.isdisjoint(d))  # 输出:True

总结

Python中的集合可以认为是数学中集合的具体实现,具有数学集合的三个性质,不仅可以进行增删改查,还可以进行数学中的集合运算。

相关文章:

Python序列之集合

系列文章目录 Python序列之列表Python序列之元组Python序列之字典Python序列之集合&#xff08;本篇文章&#xff09; Python序列之集合 系列文章目录前言一、集合是什么&#xff1f;二、集合的操作1.集合的创建&#xff08;1&#xff09;使用{}创建&#xff08;2&#xff09;…...

智慧园区物联综合管理平台之架构简述

总体架构 系统总体划分为物联感知系统层、 核心平台层、 综合运营服务平台和展示层四部分。 物联感知系统层 物联感知系统主要是支撑园区智能化运行的各子系统, 包括门禁系统、 视频监控系统、 车辆管理系统等。 核心平台层 核心平台层包括: 园区物联综合管理平台和园区…...

国科大图像处理2023速通期末——汇总2017-2019

国科大2023.12.28图像处理0854期末重点 图像处理 王伟强 作业 课件 资料 一、填空 一个阴极射线管它的输入与输出满足 s r 2 sr^{2} sr2&#xff0c;这将使得显示系统产生比希望的效果更暗的图像&#xff0c;此时伽马校正通常在信号进入显示器前被进行预处理&#xff0c;令p…...

oracle 9i10g编程艺术-读书笔记2

配置Statspack 安装Statspack需要用internal身份登陆&#xff0c;或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet登陆到服务器。 select instance_name,host_name,version,startup_time from v$instance;检查数据文件路径及磁盘空间&…...

PACC:数据中心网络的主动 CNP 生成方案

PACC&#xff1a;数据中心网络的主动 CNP 生成方案 文章目录 PACC&#xff1a;数据中心网络的主动 CNP 生成方案PACC算法CNP数据结构PACC参数仿真结果参考文献 PACC算法 CNP数据结构 PACC参数 仿真结果 PACC Hadoop Load0.2 的情况&#xff1a; PACC Hadoop Load0.4 的情况&a…...

我最喜欢的趣味几何书-读书笔记

我最喜欢的趣味几何书-读书笔记 1、利用阴影的长度来测量 公元前6世纪&#xff0c;古希腊哲学家泰勒思为了测量金字塔&#xff0c;想到了这样的方法&#xff1a;选择了一个特殊的时间&#xff0c;在那个时间&#xff0c;他自身的影子长度刚好跟他的身高相等。此时&#xff0c…...

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…...

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3数据结构中的二叉树&#xff1a; 2.4特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2.51 顺序存储&#xff1a; 2.5.2 链式存储&…...

C++日期类的实现

前言&#xff1a;在类和对象比较熟悉的情况下&#xff0c;我们我们就可以开始制作日期表了&#xff0c;实现日期类所包含的知识点有构造函数&#xff0c;析构函数&#xff0c;函数重载&#xff0c;拷贝构造函数&#xff0c;运算符重载&#xff0c;const成员函数 1.日期类的加减…...

B+树的插入删除

操作 插入 case2的原理,非叶子节点永远和最右边的最左边的节点的值相等。 case3:的基本原理 非叶子节点都是索引节点 底层的数据分裂之后 相当于向上方插入一个新的索引(你可以认为非叶子节点都是索引),反正第二层插入160 都要分裂,然后也需要再插入(因为索引部分不需要重…...

c# Avalonia 绘图

在Avalonia UI框架中&#xff0c;绘图主要通过使用DrawingContext类来实现。DrawingContext提供了一系列的绘图API&#xff0c;可以用来绘制线条、形状、图像以及文本等内容。以下是一个简单的示例&#xff0c;说明如何在Avalonia中进行基础的图形绘制 <!-- MainWindow.axa…...

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…...

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…...

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户&#xff0c;以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能&#xff1a; 房源发布&#xff1a;房地产代理网…...

2024年Mac专用投屏工具AirServer 7 .27 for Mac中文版

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…...

关于MySql字段类型的实践总结

当字段为数值类型时应使用无符号UNSIGNED修饰 ALTER TABLE infoMODIFY COLUMN user_id int UNSIGNED NOT NULL; 当字段为varchar类型时应注意是否选择合适的字符集 例如存储一些范围值&#xff0c;数字英文字符时&#xff08;IP、生日、客户端标识等或以“,”分隔的数据&…...

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…...

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了&#xff0c;但这些系统普遍都缺乏操作分布式内存的接口抽象&#xff0c;导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 &#xff0c;典型的场景就是机器学习…...

如在MT9040、IDT82V3001A 等锁相环上电后或输入参考频率改变后必须复位锁相环。

锁相环是一种反馈控制系统,它能够将输出信号的相位锁定到输入参考信号的相位上。在实际应用中,如MT9040、IDT82V3001A等PLL集成电路在上电后或者当输入参考频率发生变化后通常需要复位的原因涉及到几个方面: 1、初始化状态: 当PLL电路上电时,其内部的各个组件可能…...

构建安全的SSH服务体系

某公司的电子商务站点由专门的网站管理员进行配置和维护&#xff0c;并需要随时从Internet进行远程管理&#xff0c;考虑到易用性和灵活性&#xff0c;在Web服务器上启用OpenSSH服务&#xff0c;同时基于安全性考虑&#xff0c;需要对 SSH登录进行严格的控制&#xff0c;如图10…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

C++_核心编程_多态案例二-制作饮品

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

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...