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

【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 并集&#xff1a…...

网络安全大数据架构 网络安全之数据安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全和数据安全 从狭义来说,网络安全指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因遭到破坏、更改、泄露&…...

(前端基础)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全…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...