Python数据结构:集合(set)详解

在这里插入图片描述

1.集合的概念

  在Python中,集合(Set)是一种无序、不重复的数据类型,它的实现基于哈希表,是由唯一元素组成的。集合中不允许有重复的元素,即相同元素只能出现一次。Python中的集合类似于数学中的集合,可以执行常见的集合操作,如并集、交集、差集等。

2.集合的创建

  使用大括号{} 或者set() 函数来创建集合。注意,空集合必须使用 set() 而不是 {},因为{} 创建的是空字典。使用{}创建只有一个元素的集合时,元素后面必须带上逗号,

# 使用set()创建空集合
empty_set = set()set_number = set([6,3,23,7,9])
set_fruits = {'apple','banana','orange','pear','grape'}print(f'空集合:{empty_set}') # 输出 set()
print(f'set方法创建的集合:{set_number}') # 输出 {3, 6, 7, 9, 23}
print('花括号创建的集合:{0}'.format(set_fruits)) # 输出 {'orange', 'pear', 'apple', 'grape', 'banana'}# 判断元素是否在集合中 用 in
print('orange' in set_fruits) # 输出 True
print('cherries' in set_fruits) # 输出 False

3.集合的方法

  集合(set)在Python中有各种方法17个,主要分为基本操作(包括添加、删除、更新等),集合操作(并集、差集、交集)、判断集合性质(比较是否有交集、是否有差集)和其他方法。
在这里插入图片描述

3.1 基本操作

3.1.1 add()

  用于向集合中添加一个元素。该方法是一个原地操作,会修改调用方法的集合。如果添加的元素已经存在于集合中,则不会执行任何操作。

add_set = {'apple','banana'}
add_set.add('pear')
print(f'增加pear元素后的集合:{add_set}') # 输出 {'apple', 'banana', 'pear'}add_set.add('apple') # 已存在的元素不会执行任何操作
print(add_set) # 输出 {'apple', 'banana', 'pear'}  

3.1.2 pop()

  用于移除并返回集合中的任意一个元素,会修改调用方法的集合。由于集合是无序的,所以不能确定具体移除的是哪个元素,但这个方法总是返回一个元素。
  注意,pop()不返回新的集合,而是直接修改调用方法的集合。如果集合为空,调用 pop()会引发 KeyError

set_fruits = {'apple','banana','pear','orange','grape'}
print(f'原始集合:{set_fruits}')
print(f'移除集合的元素:{set_fruits.pop()}')
print(f'移除一个元素后的集合:{set_fruits}')set_empty = set()
set_empty.pop() # KeyError: 'pop from an empty set'

3.1.3 remove()

  用于移除集合中的指定元素,会修改调用方法的集合。如果指定的元素不存在于集合中,remove() 方法会引发KeyError

set_fruits = {'apple','banana','pear','orange','grape'}
set_fruits.remove('pear')
print(f'删除pear元素后的集合:{set_fruits}')set_fruits.remove('不是水果!报错') # KeyError: '不是水果!报错'

3.1.4 clear()

  用于清空集合,即移除集合中的所有元素,使其变为空集合,会修改调用方法的集合。

set_fruits = {'apple','banana','pear','orange','grape'}
print(f'原始集合:{set_fruits}')
set_fruits.clear()
print(f'清空后集合:{set_fruits}') # 输出 清空后集合:set()

3.1.5 discard()

  用于移除集合中的指定元素,会修改调用方法的集合。
  与 remove() 不同的是,如果指定的元素不存在于集合中,discard() 方法不会引发KeyError,而是默默地执行而不产生错误。

set_fruits = {'apple','banana','pear','orange','grape'}
set_fruits.discard('pear')
print(f'删除pear元素后的集合:{set_fruits}')set_fruits.discard('不是水果!不报错') # 不报错

3.1.6 copy()

  用于复制集合。它返回一个新的集合,其中包含与原始集合相同的元素。

set_fruits = {'apple','banana','pear','orange','grape'}
new_set_fruits = set_fruits.copy()print(f'原始集合:{set_fruits}')
print(f'copy的集合与原始集合一样:{new_set_fruits}')

3.1.7 update()

  用于将可迭代对象(通常是另一个集合、列表或其他可迭代的对象)中的元素添加到集合中,会修改调用方法的集合。

set_fruits = {'apple',}set_fruits.update({'pear','grape'}) # 添加集合 
print(f'添加集合后的集合:{set_fruits}')set_fruits.update(['orange','cherries']) # 添加列表
print(f'添加列表后的集合:{set_fruits}')set_fruits.update(('水果1','banana')) # 添加元组
print(f'添加元组后的集合:{set_fruits}')

3.1.8 len()

  函数用于获取集合中元素的个数。它返回一个表示集合中元素数量的整数值。

set_fruits = {'apple','banana','pear','orange','grape'}
set_count = len(set_fruits)
print(f'水果集合的元素个数:{set_count}个') # 输出 水果集合的元素个数:5个

3.2 判断集合性质的方法

3.2.1 isdisjoint()

  用于判断两个集合是否没有交集,如果两个集合没有共同的元素,即它们是不相交的,该方法返回 True。如果两个集合有共同的元素,即它们存在交集,该方法返回False

setA= {1,3,5}
setB = {6,8,10}
setC = {3,5,7}result_True = setA.isdisjoint(setB)
print(f'setA 和 setB 没有共同的元素:{result_True}')result_False = setA.isdisjoint(setC)
print(f'setA 和 setC 没有共同的元素:{result_False}')

3.2.2 issubset()

  用于判断一个集合是否是另一个集合的子集。如果集合 A的所有元素都是集合 B 的元素,那么集合 A就是集合 B的子集。这个方法返回布尔值,如果集合 A 集合 B 的子集,则返回True,否则返回False

setA = {1,3,5,7}
setB = {3,5,7}
setC = {2,4,6}result_True = setB.issubset(setA)
print(f'setB 是 setA 的子集:{result_True}')result_False = setC.issubset(setA)
print(f'setC 是 setA 的子集:{result_False}')

3.2.3 issuperset()

  用于判断一个集合是否是另一个集合的超集。如果集合 A包含了集合 B 的所有元素,那么集合 A 就是集合 B的超集。这个方法返回布尔值,如果集合 A集合 B的超集,则返回 True,否则返回 False

setA = {1,3,5,7}
setB = {3,5,7}
setC = {2,4,5}result_True = setA.issuperset(setB)
print(f'setA 是 setB 的超集:{result_True}')result_False = setA.issuperset(setC)
print(f'setA 是 setC 的超集:{result_False}')

3.3 集合的操作

3.3.1 union()

  用于返回两个集合的并集,即包含两个集合所有不重复元素的新集合。该方法不会修改原始集合,而是返回一个新的集合。

set_fruits1 = {'apple','banana'}
set_fruits2 = {'apple','pear','grape'}set_fruits = set_fruits1.union(set_fruits2)
print(f'并集后的集合:{set_fruits}') # 输出 {'apple', 'pear', 'banana', 'grape'}

3.3.2 difference()

  用于返回两个集合的差集,即返回一个新集合,其中包含只在第一个集合中出现而在第二个集合中不存在的元素。该方法不会修改原始集合,而是返回一个新的集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape'}set_fruits = set_fruits1.difference(set_fruits2)
print(f'差集后的集合:{set_fruits}') # 输出 {'banana', 'cherries'}

3.3.3 difference_update()

  用于移除集合中与另一个集合相同的元素。该方法直接在原始集合上进行操作,不返回新的集合。
  与 difference() 不同,difference_update() 直接修改原始集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape'}set_fruits1.difference_update(set_fruits2)
print(f'移除相同元素后的集合:{set_fruits1}') # 输出 {'banana', 'cherries'}

3.3.4 intersection()

  用于返回两个集合的交集,即返回一个新集合,其中包含同时出现在两个集合中的所有元素。该方法不会修改原始集合,而是返回一个新的集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape','cherries'}results = set_fruits1.intersection(set_fruits2)
print(f'交集后的集合:{results}') # 输出 {'cherries', 'apple'}

3.3.5 intersection_update()

  用于保留两个集合中相同的元素,直接在原始集合上进行操作,不返回新的集合。
intersection() 不同,intersection_update()直接修改原始集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape','cherries'}set_fruits1.intersection_update(set_fruits2)
print(f'交集后的集合:{set_fruits1}') # 输出 {'cherries', 'apple'}

3.3.6 symmetric_difference()

  用于返回两个集合的对称差集,即返回一个新集合,其中包含只在其中一个集合中出现的元素。该方法不会修改原始集合,而是返回一个新的集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape','cherries'}result_fruits = set_fruits1.symmetric_difference(set_fruits2)
print(f'两个集合的对称差集:{result_fruits}') # 输出 {'pear', 'banana', 'grape'}

3.3.7 symmetric_difference_update()

  用于将集合更新为其与另一个集合的对称差集,直接在原始集合上进行操作,不返回新的集合。对称差集包含只在其中一个集合中出现的元素。
symmetric_difference()不同,symmetric_difference_update()直接修改原始集合。

set_fruits1 = {'apple','banana','cherries'}
set_fruits2 = {'apple','pear','grape','cherries'}set_fruits1.symmetric_difference_update(set_fruits2)
print(f'两个集合的对称差集:{set_fruits1}') # 输出 {'pear', 'banana', 'grape'}

4.集合的引用场景

4.1 去重

  集合中的元素是唯一的,因此可以用于从一个列表或其他可迭代对象中删除重复的元素。

# 去重示例
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_set = set(my_list)
unique_list = list(unique_set)
print(unique_list)

4.2 成员关系测试

  集合提供了高效的成员关系测试,即判断一个元素是否属于集合,这在查找或验证元素的存在性时非常有用。

# 成员关系测试示例
my_set = {10, 20, 30, 40, 50}
print(20 in my_set)  # 输出 True
print(60 in my_set)  # 输出 False

4.3 集合运算

  集合支持丰富的数学运算,如并集、交集、差集等,这在处理多个集合之间的元素关系时非常有用。

set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}# 并集
union_set = set1 | set2
print(union_set)# 交集
intersection_set = set1 & set2
print(intersection_set)# 差集
difference_set = set1 - set2
print(difference_set)

4.4 快速的元素查找和删除

  集合提供了快速的元素查找和删除操作,这对于处理大型数据集时非常有用。

# 快速的元素查找和删除示例
my_set = {10, 20, 30, 40, 50}# 删除元素
my_set.remove(30)
print(my_set)# 检查元素是否存在
print(20 in my_set)

4.5 数学和统计运算

  集合可以用于执行一些基本的数学和统计运算,如计算元素个数、最大值、最小值等。

# 数学和统计运算示例
my_set = {10, 20, 30, 40, 50}# 计算元素个数
count = len(my_set)
print(count)# 计算最大值和最小值
max_value = max(my_set)
min_value = min(my_set)
print(max_value, min_value)

在这里插入图片描述

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

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

相关文章

Java14新增特性

前言 前面的文章,我们对Java9、Java10、Java11、Java12 、Java13的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 今天我们来一起看一下Java14这个版本的一些重要信息 版本介绍 Java 14…

JNDI注入

1、什么是 JNDI JNDI(Java Naming and Directory Interface, Java命名和目录接口),JNDI API 映射为特定的命名(Name)和目录服务(Directory)系统,使得Java应用程序可以和这些命名(Name&#xff…

【Shell脚本11】Shell 函数

Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。 shell中函数的定义格式如下: [ function ] funname [()]{action;[return int;]}说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何…

旺店通·企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口

旺店通企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口 源系统:旺店通企业版 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化…

Android framework添加自定义的Product项目,lunch目标项目

文章目录 Android framework添加自定义的Product项目1.什么是Product?2.定义自己的Product玩一玩 Android framework添加自定义的Product项目 1.什么是Product? 源码目录下输入lunch命令之后,简单理解下面这些列表就是product。用于把系统编…

如何显示标注的纯黑mask图

文章目录 前言一、二分类mask显示二、多分类mask显示 前言 通常情况下,使用标注软件标注的标签图看起来都是纯黑的,因为mask图为单通道的灰度图,而灰度图一般要像素值大于128后,才会逐渐显白,255为白色。而标注的时候…

sass 生成辅助色

背景 一个按钮往往有 4 个状态。 默认状态hover鼠标按下禁用状态 为了表示这 4 个状态&#xff0c;需要设置 4 个颜色来提示用户。 按钮类型一般有 5 个&#xff1a; 以 primary 类型按钮为例&#xff0c;设置它不同状态下的颜色&#xff1a; <button class"btn…

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】 一、漏洞描述二、漏洞影响三、漏洞危害四、FOFA语句五、漏洞复现1、手动复现yaml pocburp发包 2、自动化复现小龙POC检测工具下载地址 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传…

R程序 示例4.3.2版本包 在centos进行编译部署

为了在CentOS上下载和编译R语言4.3.2包&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先&#xff0c;需要安装一些必要的依赖项。可以使用以下命令安装它们&#xff1a; sudo yum install -y epel-release sudo yum install -y gcc gcc-c gcc-gfortran readline-dev…

Linux 使用随记

Linux 使用随记 shell 命令行模式登录后所取得的程序被成为shell&#xff0c;这是因为这个程序负责最外层的跟用户&#xff08;我们&#xff09;通信工作&#xff0c;所以才被戏称为shell。 命令 1、命令格式 command [-options] parameter1 parameter2 … 1、一行命令中第…

C#几种截取字符串的方法

在C#编程中&#xff0c;经常需要对字符串进行截取操作&#xff0c;即从一个长字符串中获取所需的部分信息。本文将介绍几种常用的C#字符串截取方法&#xff0c;并提供相应的示例代码。 目录 1. 使用Substring方法2. 使用Split方法3. 使用Substring和IndexOf方法4. 使用Regex类…

HBase学习笔记(3)—— HBase整合Phoenix

目录 Phoenix Shell 操作 Phoenix JDBC 操作 Phoenix 二级索引 HBase整合Phoenix Phoenix 简介 Phoenix 是 HBase 的开源 SQL 皮肤。可以使用标准 JDBC API 代替 HBase 客户端 API来创建表&#xff0c;插入数据和查询 HBase 数据 使用Phoenix的优点 在 Client 和 HBase …

uni-app报错“本应用使用HBuilderX x.x.x 或对应的cli版本编译,而手机端SDK版本是x.x.x不匹配的版本可能造成应用异常”

uniapp开发的一个跨平台软件&#xff0c;在安卓模拟器上启动的时候报警告&#xff1a; 官方给的解释&#xff1a;uni-app运行环境版本和编译器版本不一致的问题 - DCloud问答 解决办法有两个 方法一&#xff1a;添加忽略警告的配置 项目根目录下找到 manifest.json&#xf…

计算机毕业设计 基于SpringBoot的销售项目流程化管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

微信小程序 解决tab页切换过快 数据出错问题

具体问题&#xff1a;切换tab页切换过快时,上一个列表接口未响应完和当前列表数据冲突 出现数据错误 具体效果如下&#xff1a; 解决方式&#xff1a;原理 通过判断是否存在request 存在中断 并发送新请求 不存在新请求 let shouldAbort false; // 添加一个中断标志 let re…

量化交易:使用 python 进行股票交易回测

执行环境: Google Colab 1. 下载数据 import yfinance as yfticker ZM df yf.download(ticker) df2. 数据预处理 df df.loc[2020-01-01:].copy()使用了 .loc 方法来选择索引为 ‘2020-01-01’ 以后的所有行数据。通过 .copy() 方法创建了一个这些数据的副本&#xff0c;确…

星宿UI2.51资源付费变现小程序 支持流量主广告投放

目前&#xff0c;最新版的星宿UI是2.51版本。要搭建星宿UI&#xff0c;您需要准备备用域名、服务器和微信小程序账号。星宿UI提供了多项功能&#xff0c;包括文章展示、文章分类、资源链接下载和轮播图等。此外&#xff0c;还支持直接下载附件功能。这些功能使得星宿UI非常适合…

阶段七-Day01-SpringMVC

一、Sping MVC的介绍 1. 使用Front(前端)设计模式改写代码 1.1 目前我们的写法 目前我们所写的项目&#xff0c;持久层、业务层的类都放入到Spring容器之中了。他们之间需要注入非常方便&#xff0c;只需要通过Autowired注解即可。 但是由于Servlet整个生命周期都是被Tomca…

【开发工具】gitee还不用会?我直接拿捏 >_>

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 git的一些前置操作 如何获取本地仓库 本地仓库的操作 远程仓库操作 合并两个仓库&#xff08;通用方法&#xff09; 从远程仓库拉取文件报错 fatal:refusing to merge unrelated histories 分支操作 注意&…