Python序列之集合

news2025/2/27 20:50:09

系列文章目录

  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))  # 输出:False

print(b.issuperset(a))  # 输出:True

print(a.isdisjoint(c))  # 输出:False
print(a.isdisjoint(d))  # 输出:True

总结

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

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

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

相关文章

全渠道客服系统推荐:选型指南与最佳实践分享

售后服务是影响客户满意度的最直接的因素。有些企业不注重产品的售后服务&#xff0c;不仅是对客户的伤害&#xff0c;更是对企业品牌的损害。所以&#xff0c;做好售后服务对于企业来讲至关重要。 企业谈到做好售后服务&#xff0c;少不了一款好用的客服系统工具。其中&#…

9年900亿:印钞机Tether想搞大模型

作者&#xff1a;Daniel KuhnConsensus Magazine 编译&#xff1a;秦晋 碳链价值 在经历有望盈利45亿美元辉煌的一年之后&#xff0c;这位新晋升的Tether首席执行官正寻求实现公司投资的多元化。 加密货币行业受过教育或具有影响力的精英们的「明智看法」是&#xff0c;世界上最…

【零基础入门VUE】VueJS - 模板

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门VUE专栏https://blog.csdn.net/arthas777/category_12537076.html 我们在前面的章节中学习了如何在屏幕上以文本内容的形式输出。在本章中&#xff0c;我们将学习如何在屏幕上以 HTML 模板的形式获取输出。 为了…

Generalized Focal Loss V1论文解读

摘要 单级检测器基本上将物体检测表述为密集分类和定位&#xff08;即边界框回归&#xff09;。分类通常通过Focal Loss进行优化&#xff0c;而边界框的定位通常根据Dirac delta分布进行学习。单级检测器的最新趋势是引入一个单独的预测分支来估计定位质量&#xff0c;预测质量…

华清远见作业第十六天

思维导图&#xff1a; 双向循环链表头插入&#xff1a; 代码&#xff1a; Doublelist insert_head(Doublelist head,datatype element) {//创建新节点sDoublelist screate_node();if(NULLs){return head;}s->dataelement;//数据存储//判断链表是否为空if(NULLhead){heads;…

CCSK认证:开启云安全领域的黄金大门

&#x1f31f;你是否对云安全领域充满热情&#xff1f;是否希望提升自己在云安全领域的专业性和竞争力&#xff1f;CCSK认证是你的不二之选&#xff01; &#x1f525;CCSK简介&#xff1a; CCSK是国际云安全联盟&#xff08;Cloud Security Alliance&#xff0c;CSA&#xff…

OCP NVME SSD规范解读-2.复位与控制器配置要求-part2

Maximum Data Transfer Size (MDTS)&#xff1a;设备应支持至少256KB的最大数据传输大小。 CSTS.CFS Reporting: 设备固件应支持报告CSTS.CFS&#xff08;Controller Status and Capabilities Field in the Status Register&#xff09;。 Queue Depths: 每个提交队列的SQ最小…

ESP32入门七(中断)

中断用于处理在程序正常执行期间通过外部事件或者响应软件指令触发时发生的事件。比如&#xff0c;在一段呼吸灯的代码中&#xff0c;正常运行时的结果为LED从暗到亮&#xff0c;再从亮到暗持续地运行。我们可以通过一个中断来控制呼吸灯的运行和停止。使用中断功能&#xff0c…

Linux操作系统( YUM软件仓库技术 )

镜像文件的回环挂载&#xff08;把iso镜像文件释放成系统安装光盘&#xff09;foundation0上操作 回环挂载的用法&#xff1a; du -sh 对象名 //估算文件&#xff08;一切对象皆文件&#xff09;大小 !$ //上一条命令的最后一个参数 新创建的挂载点目录是空白目录 挂载&#xf…

移动端开发框架mui代码在安卓模拟器上运行(HbuilderX连接到模拟器)

开发工具 HBuilder X 3.8.12.20230817 注意&#xff1a;开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。 1、电脑下载安装安卓模拟器 我这里使用的是 夜神模拟器 &#xff0c;也可以选择其他安卓模拟器 夜神模拟器官网&#xff1a;夜神安…

Python教程(19)——python异常处理

异常处理 什么是异常异常处理方式try-except语句捕获异常类型 相关的异常类型 什么是异常 在计算机编程中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中发生的错误或异常情况。当出现异常时&#xff0c;程序无法正常继续执行&#xff0c;因此需要采…

【linux】tail的基本使用

在linux可以用find查找一个文件&#xff0c;可以用grep查找符合要求的文件内容&#xff0c;但是有的时候希望查看文件的前几行或者后几行&#xff08;其实这种场景经常可以遇到&#xff0c;比如接触到日志分析的时候&#xff09;&#xff0c;那就应该使用head和tail这两个工具了…

亲爱的程序猿们,元旦快乐!

新年祝福 在这个充满欢笑和祝福的日子里&#xff0c;我想对你们说&#xff1a; 新的一年&#xff0c;愿你们像代码一样充满逻辑&#xff0c;像算法一样追求高效&#xff0c;像编程语言一样多样化&#xff01; 2024年即将到来&#xff0c;预测几个行业趋势&#xff1a; 人工…

SpringBoot+拦截器(Interceptor)

记录一下SpringBoot的拦截器(Interceptor)使用 拦截器(Interceptor)是AOP面向切面编程的思想来实现的&#xff0c;对于只写代码的来说&#xff0c;具体如何实现不需要多关心&#xff0c;只需要关心如何去使用&#xff0c;会用在那些地方。 当http请求进入Springboot应用程序后…

第一部分 随机事件和概率

目录 无放回题目(一次摸多个) 方法&#xff1a; 例1 有放回题目(进行多次&#xff0c;每次情况一致) 方法&#xff1a; 例2 事件的概率 方法&#xff1a; 例3 条件概率 方法&#xff1a; 例4 全概率公式 方法&#xff1a; 例5 贝叶斯公式 方法&#xff1a; 例6 无放回题目(…

方太厨电,在创新科技中看见烟火人间

人类的历史&#xff0c;就是一部创新的历史。科普作者马特里德利在《创新的起源&#xff1a;一部科学技术进步史》写道&#xff1a;能源是所有创新之源。 火的发明和使用&#xff0c;就是一种创新&#xff0c;人类第一次通过控制热量的转换来做功&#xff0c;依靠火来取暖和烹饪…

使用频率分析求周期性

通常很难通过观察时间测量值来表征数据中的振荡行为。频谱分析有助于确定信号是否为周期性信号并测量不同周期。 办公楼内的温度计每半小时测量一次室内温度&#xff0c;持续四个月。加载数据并对其绘图。将温度转换为摄氏度。测量时间以周为单位。因此&#xff0c;采样率为 2 …

高并发处理专题研究 - epoll并发编程[更新中]

文章目录 1 前置知识1.1 Socket编程基础Socket概述Socket通信模型Socket API一个简单的Socket编程实例 1.2 IO多路复用1.3 阻塞原理 2 epoll原理2.1 epoll概述2.2 epoll系统调用epoll_create()epoll_ctl()epoll_wait() 2.3 epoll工作原理 3 示例代码及演示 1 前置知识 1.1 Soc…

Oracle初始化参数修改后,是否需要重启才能生效

可以查看 v$parameter或v$parameter2动态性能视图的ISSYS_MODIFIABLE列。此列指示是否可以使用 ALTER SYSTEM 更改参数以及更改何时生效&#xff1a; IMMEDIATE - 无论用于启动实例的参数文件的类型如何&#xff0c;都可以使用 ALTER SYSTEM 更改参数。 更改立即生效。DEFERRE…

spring核心与思想

spring核心与思想 Spring 是什么&#xff1f;什么是容器&#xff1f;什么是 IoC&#xff1f;传统程序开发传统程序开发的缺陷解决传统开发中的缺陷控制反转式程序开发对⽐总结规律 理解 Spring IoCDI 概念说明 Spring 是什么&#xff1f; Spring 指的是 Spring Framework&…