python 集合的详细用法


当前版本:

  • Python 3.8.4

简介

    Python中的集合是一种无序、可哈希的且不重复的数据类型,用于存储唯一的元素。集合的实现基于哈希表,因此在插入、查找和删除元素时具有高效性能。集合的每个元素都必须是不可变的,可以是数字、字符串、元组等。

        

文章目录如下

1. 如何定义集合

集合都有哪些特点呢?

集合的定义方法

2. 集合的操作

2.1. 添加元素

2.2. 删除元素

2.3. 修改元素

2.4. 访问元素

2.5. 统计元素

2.6. 成员检查

3. 集合的运算

3.1. 并集运算

3.2. 交集运算

3.3. 差集运算

3.4. 对称差集


        

1. 如何定义集合

在python中,一般通过花括号或set来定义一个集合,例如

S = set()   # 定义一个空的集合

使用花括号定义一个有数据的集合

S = {1}

注意:由于定义集合的符号与字典一致,所以当定义一个空的花括号会被识别为字典,而不是集合

        

集合都有哪些特点呢?

  1. 集合中的元素是唯一的,重复的元素会被自动忽略。
  2. 集合是无序的,元素没有固定的位置。
  3. 集合中的元素必须是可哈希的,因此,只能包含不可变对象,如数字、字符串、元组等。
  4. 集合支持常用的集合操作,如并集、交集、差集等。

        

集合的定义方法

我们一般使用花括号来定义一个集合,当集合中存在多个数据时,使用逗号将其分割,而这些数据被称为元素。

S = {"元素1", "元素2", "元素3"}

这些元素可以是数字、字符串、元组等

S = {1.1, "AA", ("X", "Y")}

        

由于集合中的元素必须是可哈希的(hashable)。

  • 可哈希的对象是指在其生命周期内其哈希值不变的对象,例如数字、字符串、元组等。

如列表、字典是不可哈希的对象(指在其生命周期中可能发生变化的对象)是无法定义到集合中

        

虽然不能定义到集合中,但是可以将列表转换为集合

L = [1, 2, 3]
S = set(L)

由于集合其中一个特性是不可重复,这也就意味着将某个列表元素去重时,可以利用集合来实现。

# 定义一个列表
L = ["AAA", 10, "AAA", 20, "BBB"]# 将列表转换为集合(自动去重)
S = set(L)# 再将集合转换为列表
L = list(S)

        

2. 集合的操作

理解了集合的特性,以及定义的方式,下面介绍一些集合的常见用法:增删改查、统计、判断等。

2.1. 添加元素

常用的两种添加元素方法:

  • add:向集合中添加一个元素。如果集合中已经存在该元素,则不会进行任何操作。
  • update:向集合中添加一个或多个元素,参数可以是可迭代对象。

【案例一】添加一个元素 add

S = {"A", "B"}
S.add(10)

        

【案例二】添加多个元素 update

S = {"A", "B"}
S.update([1, 2, 3])

        

2.2. 删除元素

常见有4种删除元素的方法:

  • remove:如果元素在集合中,则移除该元素,否则会引发 KeyError 错误。
  • discard:如果元素在集合中,则移除该元素,否则不做任何操作。
  • pop:随机移除并返回集合中的一个元素。如果集合为空,会引发 KeyError 错误。
  • clear:移除集合中所有的元素

【案例一】移除一个元素,若不存在则引发错误 remove

S = {"A", "B", "C"}
S.remove("A")

        

 【案例二】移除一个元素,若不存在则不做任何操作 discard

S = {"A", "B", "C"}
S.discard("A")

        

 【案例三】随机移除一个元素,若集合为空则报错 pop

S = {"A", "B", "C"}
S.pop()

        

 【案例四】清空元素 clear

S = {"A", "B", "C"}
S.clear()

        

2.3. 修改元素

集合是无序且不可更改的,所以需要修改某个元素时只能先删除,后添加

S = {"A", "B", "C"}# 移除B
S.discard("B")# 添加E
S.add("E")

        

2.4. 访问元素

    由于集合是无序的,所以在需要使用索引来访问某个元素时,可以将其转换为列表后操作。但问题又来了,虽然可以使用列表访问,但顺序已经被打乱后是无法精确匹配某个元素的,这对我们来说毫无意义。

    集合一般是用于存储唯一元素的无序数据结构,重点在于元素的唯一性和高效的成员关系测试。所以它的重点并不是用于访问单个元素,而是用于快速读取。

S = {1, 2, "A", "B"}
for i in S:print(f"当前元素是: {i}")

        

2.5. 统计元素

这一章节主要介绍统计元素的个数、以及求最大值、最小值等

【案例一】统计元素个数 len

S = {1, 2, "A", "B"}
len(S)

        

【案例二】求最大值(仅全数字)max

S = {1.2, 5, 0.8, 6}
max(S)

        

 【案例三】求最小值(仅全数字)min

S = {1.2, 5, 0.8, 6}
min(S)

        

 【案例四】求和(仅全数字)sum

S = {1.2, 5, 0.8, 6}
sum(S)

        

 【案例五】求平均值(仅全数字)sum/len

S = {1.2, 5, 0.8, 6}
sum(S) / len(S)

        

2.6. 成员检查

  • 集合提供了一种高效的方法来检查元素是否属于某个集合。使用集合的成员关系操作,可以快速判断一个元素是否在集合中。

在集合中一般通过 in 判断某个元素是否存在。成功为True,失败为False

S = {1, 2, "A", "B"}
"A" in S
"A" not in S

        

3. 集合的运算

集合可以进行并集、交集、差集、对称差集等运算,用于解决各种集合操作问题。

3.1. 并集运算

并集是指将两个或多个集合中的所有元素合并成一个新的集合的操作。在数学符号中,通常用符号∪(并集符号)表示。在集合中使用符号 | 或者 union() 方法来实现。

  • 当两个集合中存在相同的元素时将被合并成1个。

【案例一】| 符号实现并集

S1 = {1, 2, 3}
S2 = {3, 4, 5}
union_set = S1 | S2

        

【案例二】union() 实现并集

S1 = {1, 2, 3}
S2 = {3, 4, 5}
union_set = S1.union(S2)

        

3.2. 交集运算

交集是指两个集合中共同存在的元素所构成的新集合。在数学符号中,通常用符号∩(交集符号)表示。在集合中使用符号 & 或者 intersection() 方法来实现。

【案例一】& 符号实现交集

S1 = {1, 2, 3}
S2 = {3, 4, 5}
intersection_set = S1 & S2

        

【案例二】intersection() 实现交集

S1 = {1, 2, 3}
S2 = {3, 4, 5}
intersection_set = S1.intersection(S2)

        

3.3. 差集运算

差集是指一个集合相对于另一个集合的差异部分所构成的新集合。在数学符号中,通常使用符号 (-(减号)) 或者 (-(差集符号)) 表示。在集合中使用符号 - 或者 difference() 方法来实现。

 【案例一】符号 - 实现差集

S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5}
difference_set = S1 - S2

        

【案例二】difference() 实现差集

S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5}
difference_set = S1.difference(S2)

        

【案例三】被 - 集合存在不同的元素

S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5, 6}
difference_set = S1 - S2

        

3.4. 对称差集

对称差集用于表示两个集合之间的差异,包含的是那些只属于其中一个集合的元素,而不属于两个集合的交集。

【案例一】符号 ^ 实现对称差集

S1 = {1, 2, 3}
S2 = {2, 3, 4}
symmetric_difference = S1 ^ S2

        

【案例二】symmetric_difference() 实现对称差集

S1 = {1, 2, 3}
S2 = {2, 3, 4}
symmetric_difference = S1.symmetric_difference(S2)

        

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

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

相关文章

瑞_Java开发手册_(二)异常日志

文章目录 异常日志的意义(一) 错误码(二) 异常处理(三) 日志规约附:错误码列表 🙊前言:本文章为瑞_系列专栏之《Java开发手册》的异常日志篇,本篇章主要介绍异常日志的错误码、异常处理、日志规约。由于博主是从阿里的《Java开发手…

基于Redis+Lua的分布式限流

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 前面我们了解了如何利用Nginx做网关层限流&#xf…

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具,它可以帮助用户通过网络连接到其他计算机,实现远程控制和操作。 软件下载:Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议,包括 …

【数学建模美赛M奖速成系列】数据可视化方法(一)

数据可视化方法 写在前面山脊图优点缺点实现matlabpython 气泡矩阵图实现matlabpython 后续 写在前面 最近开始更新一个新的系列科研绘图,在同一个竞赛下,大家都近乎相同的解题思路下。之所以能出现一等二等三等奖的区别很大部分都在于结果的可视化&…

Docker 容器之间的互相通信

Docker容器之间的互相通信 步骤一:创建自定义网络 首先,我们需要创建一个自定义网络,以便容器可以连接到这个网络上,从而实现互相通信。在命令行中执行以下命令: # 创建 docker network create ddz # 查看 docker n…

利用Socket动手实现简单HTTP协议

☆* o(≧▽≦)o *☆嗨~我是小奥🍹 📄📄📄个人博客:小奥的博客 📄📄📄CSDN:个人CSDN 📙📙📙Github:传送门 📅&a…

python 元组的详细用法

当前版本: Python 3.8.4 文章目录如下 1. 介绍元组 2. 定义元组 3. 访问元组 4. 查询元组 1. 介绍元组 元组(Tuple)是一个有序的、不可变的数据序列。它可以包含各种类型的数据,例如数字、字符串、列表等。元组使用圆括号()来…

Elasticsearch:聊天机器人教程(二)

这是继上一篇文章 “Elasticsearch:聊天机器人教程(一)”的续篇。本教程的这一部分讨论聊天机器人实现中最有趣的方面,以帮助你理解它并对其进行自定义。 数据摄入 在此应用程序中,所有示例文档的摄取都是通过 flask …

2024年信息安全不完全预测

不需要专家预言就能知道,计算机安全将在2024年出现在新闻中,而且可能不是什么好事。但2024年网络犯罪分子将如何试图突破防御并窃取有价值的数据,值得我们看一看安全专家们的看法和预测。 不需要专家预言就能知道,计算机安全将在…

【深度学习I-基础知识】

深度学习I-基础知识 1 基础知识1.1 模型的基本概念1.2 机器学习1.2.1 概率建模1.2.2 核方法1.2.3 决策树、随机森林和梯度提升机 1.3 深度学习1.3.1 张量1.3.2 数据批量1.3.3 张量运算1.3.4 训练过程 1 基础知识 1.1 模型的基本概念 模型是现实世界中一类具有泛化共性的真实系…

canvas截取视频图像(图文示例)

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

2023一带一路暨金砖国家技能发展与技术创新大赛“网络安全”赛项省选拔赛样题卷②

2023金砖国家职业技能竞赛"网络安全" 赛项省赛选拔赛样题 2023金砖国家职业技能竞赛 省赛选拔赛样题第一阶段:职业素养与理论技能项目1. 职业素养项目1. 职业素养项目2. 网络安全项目3. 安全运营 第二阶段:安全运营项目1. 操作系统安全配置与加…

Docker部署的gitlab升级指南(15.11.X容器里升级PostgreSQL到13.8)

一、确定当前版本 #进入当前版本容器产看gitlab版本 docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION#显示版本如下 14.4.0二、备份数据,防止升级发生意外 #执行备份命令 docker exec -ti gitlab gitlab-rake gitlab:backup:creat…

go的安装及配置

go的官方下载地址:All releases - The Go Programming Language​​​​​​ 1、找到对应的版本包下载,例如 wget https://golang.google.cn/dl/go1.21.6.linux-amd64.tar.gz 2、下载完成后配置解压Go源码包 tar -zxf go1.21.6.linux-amd64.tar.gz 3…

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读状态机定义状态转移图Mealy和Moore型状态机推荐写“新两段式状态机” 设计实战可乐机两种state的FSM(异步复位)4种状态的one-hot状态机4种状态的同步复位状态机蓄水池问题 参考链接 理论解读 状态机定义 状态机简写为 FSM(Fin…

Python3 索引下标及切片完全指南

介绍 Python 字符串数据类型是由一个或多个字符组成的序列,可以包含字母、数字、空格字符或符号。由于字符串是一个序列,我们可以通过索引和切片的方式访问它,就像访问其他基于序列的数据类型一样。 本教程将指导您通过索引访问字符串&…

网络攻击与检测防御:维护数字安全的关键挑战

随着数字化时代的深入,网络攻击已成为企业和个人面临的严峻挑战之一。本文将深入探讨不同类型的网络攻击,以及有效的检测和防御策略,以确保网络系统的安全性和稳定性。 1. 常见网络攻击类型: DDoS 攻击:分布式拒绝服…

IOC之Spring统一资源加载策略

前言 在学 Java的时候,我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实…

生成式对抗网络GAN

Generative Adversarial Nets由伊恩古德费洛(Ian J.Goodfellow)等人于2014年发表在Conference on Neural Information Processing Systems (NeurIPS)上。NeurIPS是机器学习和计算神经科学领域的顶级国际学术会议之一。 1. GAN在哪些领域大放异彩 图像生…

黑马苍穹外卖学习Day6

HttpClient 介绍 HttpClient 是 Apache 提供的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一种更简便的方式来执行 HTTP 请求,并支持多种协议,如 HTTP、HTTPS、FTP 等。 使用 HttpClient 可以方便地与远程…