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,一经查实,立即删除!

相关文章

Double DQN算法

Double DQN算法 问题 DQN 算法通过贪婪法直接获得目标 Q 值,贪婪法通过最大化方式使 Q 值快速向可能的优化目标收敛,但易导致过估计Q 值的问题,使模型具有较大的偏差。 即: 对于DQN模型, 损失函数使用的 Q(state) reward Q(ne…

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() 定义,不带任何…

SQL基础理论篇(一):什么是SQL

文章目录 什么是SQLSQL的四大部分常用的SQL标准参考文献 什么是SQL SQL的全称是Structured Query Language,即结构化查询语句。 其最早诞生于1974年,IBM研究员发布的一篇论文"SEQUEL:一门结构化的英语查询语言"。这几十年里&…

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

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

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

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

OpenCV+特征检测

检测 函数cv.cornerHarris()。其参数为: img 输入图像,应为灰度和float32类型blockSize是拐角检测考虑的邻域大小ksize 使用的Sobel导数的光圈参数k 等式中的哈里斯检测器自由参数 import numpy as np import cv2 as cv filename chessboard.png img…

如何显示标注的纯黑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、一行命令中第…

UML建模语言

UML建模语言 类的关系 依赖关系 类的方法中使用形参、局部变量或者静态方法的方式调用其他类&#xff0c;表示当前类依赖其他类。 public class Main {public void eat(Person person) {person.play();// 方法参数Student student new Student();student.study();// 局部变…

4 条件判断和循环

文章目录 一、条件判断和循环1.1 if语句1.2 if-else1.3 if-elif-else1.4 for循环1.5 while循环1.6 break退出循环1.7 continue继续循环1.8 多重循环 二、练习题小结 一、条件判断和循环 1.1 if语句 输入用户年龄&#xff0c;根据年龄打印不同的内容&#xff0c;在Python程序中…

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

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

JVM之垃圾回收

1. 如何判断对象可以回收 1.1 引用计数法 引用计数法是一种内存管理技术&#xff0c;其中每个对象都有一个与之关联的引用计数。引用计数表示当前有多少个指针引用了该对象。当引用计数变为零时&#xff0c;表示没有指针再指向该对象&#xff0c;该对象可以被释放&#xff0c…

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

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

C++虚基类详解

多继承&#xff08;Multiple Inheritance&#xff09; 是指从多个直接基类中产生派生类的能力&#xff0c;多继承的派生类继承了所有父类的成员。尽管概念上非常简单&#xff0c;但是多个基类的相互交织可能会带来错综复杂的设计问题&#xff0c;命名冲突就是不可回避的一个。…