【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)
文章目录
- 1. 语法
- 1.1 使用 {} 定义
- 1.2 使用 set() 定义
- 2. 特点
- 3. 常用操作
- 3.1 访问元素
- 3.2 查找数据
- 3.3 添加元素
- 3.3.1 add() 方法
- 3.3.2 update()方法
- 3.4 删除元素
- 3.4.1 remove()方法
- 3.4.2 discard()方法
- 3.4.3 pop()方法
- 3.4.4 clear()方法
- 3.5 集合运算
- 3.5.1 并集:| 或者 union()
- 3.5.2 交集:& 、intersection() 或者 intersection_update()
- 3.5.3 差集 - 、difference() 或者 difference_update()
- 3.5.4 对称差集(异或)^ 或者 symmetric_difference() 方法
- 3.6 判断数据
- 3.6.1 .issubset()方法
- 3.6.2 .isdisjoint()方法
- 3.6.3 .issuperset()方法
- 3.7 集合推导式
- 4. 集合性能
- 5. 使用场景
- 5.1 去重操作
- 5.2 成员检测
- 5.3 集合运算简化逻辑
- 6. 关于列表和集合
- 7. 总结
1. 语法
- 集合(set):一组key的集合,key具有唯一性;但不存储value,是一种 无序、不重复元素 的数据结构
- 通过 {} 或者 set() 函数定义
- 当使用花括号定义时,至少要有一个元素,否则会被解释为字典;即 空集合必须用 set() 创建 。
1.1 使用 {} 定义
my_set_0 = {1,2,3}
print(my_set_0)
输出:

1.2 使用 set() 定义
my_set_0 = {1,2,3}
print(my_set_0)
my_set_1 = set([1,2,3]) #通过set()函数定义,需要提供一个list作为输入集合
print(my_set_1) #打印的{1,2,3}只是表明set内部由1,2,3这三个元素,显示的顺序不表示set是有序的
my_set_2 = {1,2,3,4,4,4,4}
print(my_set_2) #重复元素在set中被自动过滤
输出:

2. 特点
- 无序性 :集合中元素没有特定顺序,不能通过索引来访问
- 元素的唯一性 :集合中不允许由重复的元素
- 可变性 :可以添加或删除元素,但集合中的 元素必须是不可变类型 (整数、字符串、元组)
3. 常用操作
3.1 访问元素
由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来
a = {1,'c',1,(1,2,3),'c'}
for ele in a:print(ele,end=' ')
输出:

3.2 查找数据
通过 in \ not in 进行数据的查找判断,打印判断结果True\False
my_set_0 = {1,2,3}
print(8 in my_set_0)
print(8 not in my_set_0)
输出:

3.3 添加元素
3.3.1 add() 方法
add()方法添加单个元素
my_set_0 = {1,2,3}
my_set_0.add(4)
print(my_set_0)
输出:

3.3.2 update()方法
update()方法添加多个元素
(集合有去重功能,当追加的数据是已有数据的话,则不进行任何操作)
my_set_0 = {1,2,3}
my_set_0.update([3,5,6,7,8]) #集合有去重功能,当追加的数据是已有数据的话,则不进行任何操作
print(my_set_0)
输出:

3.4 删除元素
3.4.1 remove()方法
remove()方法删除指定元素,如果元素不存在会抛出KeyError异常
my_set_0 = {1,2,3}
my_set_0.remove(3)
print(my_set_0)
my_set_0.remove(10)
print(my_set_0)
输出:

3.4.2 discard()方法
discard()方法删除指定元素,如果元素不存在不会抛出异常
my_set_0 = {1,2,3}
my_set_0.discard(3)
print(my_set_0)
my_set_0.discard(10)
print(my_set_0)
输出:

3.4.3 pop()方法
pop()方法随机删除集合中的某个元素,没有参数;当集合为空时再次使用pop方法会抛出KeyError异常
my_set_0 = {1,2,3}
del_num = my_set_0.pop()
print(del_num)
print(my_set_0)
del_num2 = my_set_0.pop()
print(del_num2)
print(my_set_0)
del_num3 = my_set_0.pop()
print(del_num3)
print(my_set_0)
del_num4 = my_set_0.pop() #当集合为空时再次使用pop方法会抛出KeyError异常
输出:

3.4.4 clear()方法
clear()方法删除集合中的所有元素,打印set()
my_set_0 = {1,2,3}
my_set_0.clear()
print(my_set_0)
输出:

3.5 集合运算
集合运算:set可以看成数学意义上的无序和无重复元素的集合,因此多个set可以做数学意义上的集合运算
定义以下两个集合:
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
3.5.1 并集:| 或者 union()
并集:使用 | 运算符或者 union()方法
当对多个集合进行合并时,用 , 隔开
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
union_set1 = set1 | set2
union_set2 = set1.union(set2)
print(union_set1)
print(union_set2)
set3 = {'happies','wealth','big house'}
union_sets = set.union(set1,set2,set3) #多个集合合并时,用 , 隔开
print(union_sets)
输出:

3.5.2 交集:& 、intersection() 或者 intersection_update()
- & 运算符 、intersection()方法:用于返回包含 多个集合中都包含的元素集,即交集;不修改原集合,生成一个新集合,原集合保持不变
- intersection_update()方法:是一个操作, 保留交集 ;将当前集合更新为与一个或多个可迭代对象的交集。直接修改原集合:不返回新集合,而是返回 None
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
set4 = {'c','1','2','3'}in_set = set1 & set2
print(in_set) # 返回 set1 和 set2 的交集 {'c', 'd'}in_set = set1.intersection(set2)
print(in_set) # 返回 set1 和 set2 的交集 {'c', 'd'}in_set = set.intersection(set1,set2,set4)
print(in_set) # 返回 set1、set2、set4 多个集合的交集 {'c'}in_set = set1.intersection_update(set2)
print(in_set) # intersection_update()方法不生成新集合,返回 None
print(set1) # intersection_update()方法直接修改原集合 set1
print(set2) # intersection_update()方法不修改 set2
输出:

3.5.3 差集 - 、difference() 或者 difference_update()
- -运算符、s1.difference(s2)方法:返回一个包含两个集合之间差异的集合,返回的集合中包含仅存在在s1中但不存在s2中的元素;会返回一个新的集合,不包括不需要的元素
- difference_update()方法:是一个操作, 保留差集 ;从原始集合中删除两个集合中存在的元素;不返回新集合,而是返回 None
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}print(set1.difference(set2))
print(set1 - set2)print(set1.difference_update(set2)) #difference_update是在原集合中进行的一个操作,所以返回值为 None
set1.difference_update(set2)
print(set1)
输出:

3.5.4 对称差集(异或)^ 或者 symmetric_difference() 方法
对称差集是指在两个集合中,只在其中一个集合中出现的元素组成的集合
- ^ 或者 symmetric_difference() 方法:返回新的集合,保留对称差集
- symmetric_difference_update():是一个操作, 保留对称差集 ;不返回新集合,而是返回 None
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}print(set1 ^ set2)
print(set1.symmetric_difference(set2))set1.symmetric_difference_update(set2)
print(set1)
print(set2)
输出:

3.6 判断数据
3.6.1 .issubset()方法
s1.issubset(s2)方法:判断s1是否 是s2的子集 ;用于判断集合的所有元素是否都在指定集合中,返回布尔值
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}union_set = set1 | set2
print(set1.issubset(set2))
print(set1.issubset(union_set))
输出:

3.6.2 .isdisjoint()方法
isdisjoint()方法:判断是否 无交集 ,判断两个集合中有无相同的元素,没有返回True
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
set3 = {'happies','wealth','big house'}print(set1.isdisjoint(set2)) #有相同的元素返回False
print(set1.isdisjoint(set3)) #没有相同的元素返回True
输出:

3.6.3 .issuperset()方法
s1.issuperset(s2)方法:判断s1是否 是s2的超集 ;判断如果指定集合中的所有元素都存在原集合中,返回True
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}union_set = set1 | set2
print(set1.issuperset(union_set))
print(union_set.issuperset(set1))
输出:

3.7 集合推导式
- 语法: {表达式 for 变量 in 可迭代对象 if 条件}
- 类似列表推导式
even_squares = {x ** 2 for x in range(10) if x % 2 == 0}
print(even_squares) # 输出:{0, 4, 16, 36, 64}
4. 集合性能
- 查找效率:基于哈希表实现, 查找时间复杂度为 O(1)
- 去重操作:快速去除列表中的重复元素
5. 使用场景
5.1 去重操作
lst = [1, 2, 2, 3, 4, 4]
unique = list(set(lst)) # 去重 → [1, 2, 3, 4](顺序可能丢失)
print(unique)
输出:

5.2 成员检测
比列表的 in 操作快得多(列表为 O(n),集合为 O(1))
large_set = set(range(10**6))
print(999999 in large_set) # 极快
5.3 集合运算简化逻辑
eg:统计两篇文章的共有词汇
article1 = {"apple", "banana", "cherry"}
article2 = {"banana", "date", "elderberry"}
common_words = article1 & article2 # 输出:{"banana"}
6. 关于列表和集合
需要唯一元素 → 集合
需要顺序或重复元素 → 列表
7. 总结
- 集合是基于 哈希表 的高效数据结构,通过 {} 或者 set() 函数定义
- 无序、不重复元素; 不支持索引
- 空集合必须用 set() 创建
- 元素必须为 不可变类型
- 适用场景:元素去重、集合运算、高效元素检测等
相关文章:
【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)
文章目录 1. 语法1.1 使用 {} 定义1.2 使用 set() 定义 2. 特点3. 常用操作3.1 访问元素3.2 查找数据3.3 添加元素3.3.1 add() 方法3.3.2 update()方法 3.4 删除元素3.4.1 remove()方法3.4.2 discard()方法3.4.3 pop()方法3.4.4 clear()方法 3.5 集合运算3.5.1 并集:…...
网络安全大数据架构 网络安全之数据安全
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全和数据安全 从狭义来说,网络安全指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因遭到破坏、更改、泄露&…...
(前端基础)CSS(一)
了解 Cascading Style Sheet:层叠级联样式表 CSS:表现层(美化网页)如:字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势: 内容和表现分离网页结构表现统一,可以实现复用…...
Redis数据类型全景解析:从底层编码到应用反模式
一、核心数据类型矩阵 1.1 基础类型对比表 类型底层结构最大容量时间复杂度典型场景StringSDS/Embstr/Raw512MBO(1)读写缓存/计数器ListQuickList(ziplist)2^32-1元素头尾操作O(1)消息队列Hashziplist/hashtable2^32-1键值对O(1)平均对象存储Setintset/hashtable2^32-1成员O(…...
(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解
题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...
TypeScript跟js,es6这些的区别
TypeScript 一、TypeScript 是什么 想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...
flink-cdc同步数据到doris中
1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题,因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…...
Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析
引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...
Golang教程
1. go 环境与命令 1.1 go 环境搭建 SDK 安装 Go 官网:golang.orgGo 中文社区:https://studygolang.com/dlGo API文档:https/golang.org 或 https://studygolang.com/pkgdoc 目录 api :api 存放bin:go命令src&#…...
AI 百炼成神:线性回归,预测房价
我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...
企业软件合规性管理:构建高效、安全的软件资产生态
引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...
每日一题——编辑距离
编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…...
TensorFlow项目GPU运行 安装步骤
以下是在 Linux 系统 下搭建完整 GPU 加速环境的详细流程(适配 CUDA 11.2 和 Python 3.9): 1. 前置检查 1.1 验证 NVIDIA 驱动 # 检查驱动版本(需 ≥ 450.80.02) nvidia-smi 输出示例: CUDA Version: 11.2…...
c++进阶———继承
1.引言 在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话…...
FreeSwitch的mod_translate模块详细,附带场景案例及代码示例
mod_translate 模块详细介绍 mod_translate 是 FreeSWITCH 中的一个拨号计划应用程序模块,用于对电话号码或字符串进行格式转换和翻译。它可以根据预定义的规则对输入的内容进行匹配和转换,常用于号码格式化、路由选择、号码屏蔽等场景。 主要功能 号码…...
前端504错误分析
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案: 1. 确认错误来源 504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端 → 代理服务器 → 后端服务,问题通常出在代理与后端之间。…...
在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
文章目录 一、引言二、什么是 JSON Web 令牌?三、什么是 JSON Web 令牌结构?四、设置 JWT 令牌身份验证4.1 创建新的 .NET 8 Web API 项目4.2 安装所需的 NuGet 软件包4.3 创建 JWT 配置模型4.4 将 JWT 配置添加到您的 appsettings.json 中4.5 为 Config…...
基于python实现机器学习的心脏病预测系统
以下是一个基于 Python 实现的简单心脏病预测系统代码示例,我们将使用 Scikit - learn 库中的机器学习算法(这里以逻辑回归为例),并使用公开的心脏病数据集。 步骤: 数据加载与预处理:加载心脏病数据集&a…...
使用 NVM 随意切换 Node.js 版本
安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...
【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
