深入探索Python集合(Set)的高效应用:数据处理、性能优化与实际案例分析

在这里插入图片描述

文章目录

    • 前言
    • 🪁一、 定义集合
      • 1.1 使用大括号 `{}` 定义集合
      • 1.2 使用 `set()` 函数定义集合
    • 🪁二、添加元素
      • 2.1 使用 `add()` 方法
      • 2.2 使用 `update()` 方法
    • 🪁三、移除元素
      • 3.1 使用 `remove()` 方法
      • 3.2 使用 `discard()` 方法
      • 3.3 使用 `pop()` 方法
      • 3.4 使用 `clear()` 方法
      • 3.5 使用 `del` 关键字
      • 小结:
    • 🪁四、取差集
      • 4.1 使用 `difference()` 方法
      • 4.2 使用 `-` 运算符
      • 4.3 使用 `difference_update()` 方法
      • 小结:
    • 🪁五、合并集合
      • 5.1 使用 `union()` 方法
      • 5.2 使用 `|` 运算符
      • 5.3 使用 `update()` 方法
      • 小结:
    • 🪁六、清空集合和获取集合长度
      • 6.1 清空集合(clear)
      • 6.2 获取集合长度(len)
      • 小结:
    • 🪁七、遍历集合
      • 7.1 使用 `for` 循环遍历集合
      • 7.2 使用 `enumerate()` 获取索引和元素
      • 小结:
    • 结语


前言

在Python编程中,集合(set)是一种基本的数据结构,它用于存储唯一(不重复)的元素。与列表(list)不同,集合中的元素是无序的,并且不允许有重复值。集合提供了丰富的操作方法来处理集合之间的关系,如并集、交集、差集等。本文将详细介绍Python中集合的常用操作,并通过代码实例进行演示和分析。


🪁一、 定义集合

在 Python 中,定义集合可以通过两种方式实现:使用大括号 {} 或使用 set() 函数。下面是具体的用法:

1.1 使用大括号 {} 定义集合

这种方式是定义集合的最直接方式,但注意,集合中的元素必须是不可变类型(例如,整数、字符串、元组等),并且集合中的元素是唯一的。

# 定义一个包含整数的集合
int_set = {1, 2, 3, 4}# 定义一个包含字符串的集合
str_set = {"apple", "banana", "cherry"}# 定义一个混合类型的集合
mixed_set = {1, "apple", (2, 3)}print(int_set)    # 输出: {1, 2, 3, 4}
print(str_set)    # 输出: {'apple', 'banana', 'cherry'}
print(mixed_set)  # 输出: {1, (2, 3), 'apple'}

1.2 使用 set() 函数定义集合

当你需要从其他可迭代对象(如列表、元组、字符串等)创建集合时,或者当你需要定义一个空集合时,可以使用 set() 函数。

# 从列表创建集合
list_set = set([1, 2, 2, 3, 4])  # 重复元素 2 会自动去重
print(list_set)  # 输出: {1, 2, 3, 4}# 从字符串创建集合
str_set = set("hello")
print(str_set)  # 输出: {'e', 'h', 'l', 'o'} (无序,元素唯一)# 创建一个空集合
empty_set = set()
print(empty_set)  # 输出: set()

注意

  • 直接使用 {} 会创建一个空字典,而不是集合。要定义空集合,必须使用 set() 函数。
  • 集合中不允许出现可变类型的元素,例如,不能将列表或字典作为集合的元素。

这样就定义好了集合,接下来可以使用它来执行各种集合操作。

🪁二、添加元素

在 Python 中,可以通过以下两种方式向集合中添加元素:

2.1 使用 add() 方法

add() 方法用于向集合中添加单个元素。如果该元素已经存在于集合中,集合不会发生变化,因为集合中的元素是唯一的。

# 定义一个集合
my_set = {1, 2, 3}# 添加一个新的元素
my_set.add(4)print(my_set)  # 输出: {1, 2, 3, 4}# 尝试添加一个已经存在的元素
my_set.add(3)print(my_set)  # 输出: {1, 2, 3, 4} (没有变化,因为 3 已经存在)

2.2 使用 update() 方法

update() 方法用于向集合中添加多个元素。可以传入一个可迭代对象(如列表、元组、字符串、另一个集合等),并将其中的元素添加到集合中。

# 定义一个集合
my_set = {1, 2, 3}# 添加多个元素
my_set.update([4, 5])print(my_set)  # 输出: {1, 2, 3, 4, 5}# 使用字符串作为可迭代对象
my_set.update("hello")  # 每个字符会作为单独的元素添加print(my_set)  # 输出: {1, 2, 3, 4, 5, 'e', 'l', 'h', 'o'} (无序,字符被拆分)

注意

  • add() 是添加单个元素,而 update() 可以添加多个元素。
  • update() 方法可以接受任何可迭代对象(列表、元组、字符串等),并会将其中的元素逐个添加到集合中。

🪁三、移除元素

在 Python 中,集合提供了多种方法来移除元素。常用的有以下几种:

3.1 使用 remove() 方法

remove() 方法用于移除指定的元素。如果该元素不存在于集合中,会抛出 KeyError 异常。

# 定义一个集合
my_set = {1, 2, 3, 4}# 移除一个存在的元素
my_set.remove(3)print(my_set)  # 输出: {1, 2, 4}# 移除一个不存在的元素(会抛出 KeyError)
# my_set.remove(5)  # 运行时将抛出 KeyError: 5

3.2 使用 discard() 方法

discard() 方法和 remove() 类似,用于移除指定的元素,但如果该元素不存在,discard() 不会抛出异常。

# 定义一个集合
my_set = {1, 2, 3, 4}# 移除一个存在的元素
my_set.discard(3)print(my_set)  # 输出: {1, 2, 4}# 移除一个不存在的元素,不会抛出异常
my_set.discard(5)print(my_set)  # 输出: {1, 2, 4} (没有变化)

3.3 使用 pop() 方法

pop() 方法随机移除集合中的一个元素,并返回该元素。由于集合是无序的,因此无法预知移除的是哪个元素。如果集合为空,调用 pop() 会抛出 KeyError

# 定义一个集合
my_set = {1, 2, 3, 4}# 随机移除一个元素,并返回该元素
removed_element = my_set.pop()print(removed_element)  # 输出: (随机的元素,可能是 1、2、3、4 中的任何一个)
print(my_set)  # 输出: 剩余的元素集合,移除一个元素后的集合

3.4 使用 clear() 方法

clear() 方法用于移除集合中的所有元素,将集合变为空集合。

# 定义一个集合
my_set = {1, 2, 3, 4}# 清空集合
my_set.clear()print(my_set)  # 输出: set() (空集合)

3.5 使用 del 关键字

如果你想完全删除集合对象(不仅是移除集合中的元素,还要删除整个集合),可以使用 del 关键字。

# 定义一个集合
my_set = {1, 2, 3, 4}# 删除集合
del my_set# 访问被删除的集合将抛出 NameError
# print(my_set)  # 将抛出 NameError: name 'my_set' is not defined

小结:

  • remove():移除指定元素,元素不存在时抛出异常。
  • discard():移除指定元素,元素不存在时不抛异常。
  • pop():随机移除并返回一个元素,集合为空时抛出异常。
  • clear():清空集合中的所有元素。
  • del:删除整个集合对象。

🪁四、取差集

在 Python 中,差集指的是一个集合中的元素减去另一个集合中的元素,即返回只存在于第一个集合但不在第二个集合中的元素。可以通过以下几种方式来获取集合的差集:

4.1 使用 difference() 方法

difference() 方法返回两个集合的差集,结果是一个新的集合,不会修改原始集合。

# 定义两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}# 获取 set1 与 set2 的差集
difference_set = set1.difference(set2)print(difference_set)  # 输出: {1, 2} (只在 set1 中出现,未出现在 set2 中)

4.2 使用 - 运算符

- 运算符也可以用于获取两个集合的差集,结果同样是一个新的集合。

# 定义两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}# 使用 - 运算符获取差集
difference_set = set1 - set2print(difference_set)  # 输出: {1, 2} (同样是 set1 中的元素减去 set2 中的元素)

4.3 使用 difference_update() 方法

difference_update() 方法与 difference() 的不同之处在于,它会直接修改调用该方法的集合,使其变为差集结果,而不返回新集合。

# 定义两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}# 直接更新 set1,使其变为差集
set1.difference_update(set2)print(set1)  # 输出: {1, 2} (set1 本身被修改为差集结果)

小结:

  • difference()- 运算符:返回两个集合的差集,结果为新集合,不修改原集合。
  • difference_update():将原集合修改为差集,不返回新集合。

🪁五、合并集合

在 Python 中,合并集合(即并集操作)是将两个或多个集合中的所有元素合并到一起,并去除重复的元素。Python 提供了几种方式来执行集合的并集操作:

5.1 使用 union() 方法

union() 方法用于返回两个或多个集合的并集,结果是一个新的集合,不会修改原始集合。

# 定义两个集合
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 获取 set1 和 set2 的并集
union_set = set1.union(set2)print(union_set)  # 输出: {1, 2, 3, 4, 5}

你可以传入多个集合进行并集操作:

# 定义多个集合
set1 = {1, 2}
set2 = {3, 4}
set3 = {4, 5, 6}# 合并多个集合
union_set = set1.union(set2, set3)print(union_set)  # 输出: {1, 2, 3, 4, 5, 6}

5.2 使用 | 运算符

| 运算符也是用于获取集合并集的快捷方式,效果与 union() 方法相同。

# 定义两个集合
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 使用 | 运算符获取并集
union_set = set1 | set2print(union_set)  # 输出: {1, 2, 3, 4, 5}

5.3 使用 update() 方法

update() 方法用于将一个集合与另一个集合的并集更新到当前集合中,即直接修改调用 update() 的集合,并不会返回新的集合。

# 定义两个集合
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 更新 set1,使其成为与 set2 的并集
set1.update(set2)print(set1)  # 输出: {1, 2, 3, 4, 5} (set1 被修改)

小结:

  • union():返回两个或多个集合的并集,结果是一个新集合,不修改原始集合。
  • | 运算符:与 union() 类似,用于返回两个集合的并集。
  • update():直接将并集结果更新到原集合,修改原集合。

🪁六、清空集合和获取集合长度

在 Python 中,清空集合获取集合长度可以通过以下方法来实现:

6.1 清空集合(clear)

可以使用 clear() 方法来清空一个集合。clear() 会移除集合中的所有元素,使其变成一个空集合。

# 定义一个集合
my_set = {1, 2, 3, 4, 5}# 使用 clear() 方法清空集合
my_set.clear()print(my_set)  # 输出: set() (空集合)

6.2 获取集合长度(len)

可以使用内置函数 len() 来获取集合的长度,返回集合中元素的个数。

# 定义一个集合
my_set = {1, 2, 3, 4, 5}# 使用 len() 获取集合长度
length = len(my_set)print(length)  # 输出: 5 (集合中有 5 个元素)

小结:

  • 清空集合:使用 clear() 方法可以将集合中的所有元素移除,变为一个空集合。
  • 获取集合长度:使用 len() 函数可以获取集合中元素的数量。

🪁七、遍历集合

在 Python 中,遍历集合可以使用 for 循环,因为集合是可迭代的。由于集合是无序的,遍历集合时元素的顺序是随机的。以下是遍历集合的常见方式:

7.1 使用 for 循环遍历集合

# 定义一个集合
my_set = {1, 2, 3, 4, 5}# 使用 for 循环遍历集合
for element in my_set:print(element)

输出的顺序可能是任意的,因为集合是无序的,例如:

1
2
3
4
5

7.2 使用 enumerate() 获取索引和元素

虽然集合本身是无序的,但如果你希望在遍历时获得类似索引的功能,可以使用 enumerate()。尽管 enumerate() 返回的数字并不是集合元素的实际索引(因为集合无序),但它可以用作遍历过程中每次迭代的计数器。

# 定义一个集合
my_set = {1, 2, 3, 4, 5}# 使用 enumerate() 遍历集合并获取计数
for index, element in enumerate(my_set):print(f"元素 {index}: {element}")

可能的输出是:

元素 0: 1
元素 1: 2
元素 2: 3
元素 3: 4
元素 4: 5

小结:

  • 使用 for 循环:最简单的方式,用于遍历集合中的每个元素。
  • 使用 enumerate():可以在遍历时为每个元素提供一个计数器,尽管集合元素没有固定顺序。

结语

本文详细介绍了Python中集合的常用操作,包括定义集合、添加元素、移除元素、随机移除元素、取差集、原地取差集、合并集合、清空集合和获取集合长度等。集合作为一种独特的数据结构,在Python编程中发挥着重要作用,特别是在处理唯一性要求和集合运算时。通过掌握集合的用法,我们可以更加高效地处理数据,提高编程效率和代码可读性。希望本文对你理解和使用Python集合有所帮助!
在这里插入图片描述

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,17的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是17前进的动力!

在这里插入图片描述

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

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

相关文章

【氮化镓】低温对p-GaN HEMT迁移率、阈值电压和亚阈值摆幅的影响

本期分享一篇低温对p-GaN HEMT 迁移率、阈值电压和亚阈值摆幅影响进行表征和建模的研究论文。文章作者Shivendra Kumar Singh、Thien Sao Ngo、Tian-Li Wu(通讯作者)和Yogesh Singh Chauhan,分别来资源中国台湾阳明交通大学国际半导体技术学院、印度理工学院坎普尔分校电气工…

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透,怎么解决? 缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时…

西南交通大学计算机软件专业上岸难度分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南交通大学计算机科学与技术2024届考研难度整体呈现"稳中有升"的态势。学硕实际录取33人,复试分数线362分,复试录取率71.74%;专硕(计算机技术)实际…

【数据结构笔记】408二叉树、堆、AVL、图、拓扑排序

文章目录 堆和二叉树一、定义与性质二、结构特点三、应用场景四、查找效率解释荷兰围棋问题拓扑排序的树 逆拓扑排序邻接表的存储 二叉树、二叉平衡树、图刷题笔记 堆和二叉排序树是数据结构中两种不同的树状结构,它们之间存在显著的区别。以下是对这两种数据结构的…

通过SSH远端免密登录执行脚本,修改最新5分钟生成文件权限

通过SSH远端免密登录执行脚本,修改最新5分钟生成文件权限 一、准备工作二、脚本内容三、使用脚本四、注意事项 在日常的系统管理中,经常需要对远程服务器上的文件进行操作。本文将介绍如何通过SSH远端免密登录,执行一个脚本来查找某目录下最新…

半导体材料ERP系统在生产计划管理方面的应用

在科技日新月异的今天,半导体材料作为信息技术的基石,其生产效率与质量管理直接关系到整个产业链的竞争力。为了精准把控生产流程,优化资源配置,半导体行业正积极引入高科技的ERP(企业资源计划)系统,特别是在生产计划管…

关于vue3中如何实现多个v-model的自定义组件

实现自定义组件<User v-model"userInfo" v-model:gender"gender"></User> User组件中更改数据可以同步更改父组件中的数据&#xff1a; 1 父组件&#xff1a; <User v-model"userInfo" v-model:gender"gender">&…

LabVIEW程序员可以从哪几个方面提升自己?有没有详细的路线图?

作为一名LabVIEW程序员&#xff0c;要在快速发展的技术领域保持竞争力并不断提升自己&#xff0c;需要从多个方面进行持续的学习和实践。下面我将为你详细说明LabVIEW程序员提升自己的几个关键方向&#xff0c;并给出具体的成长路线图。 1. 夯实基础&#xff1a;掌握LabVIEW的…

【D3.js in Action 3 精译_035】4.1 D3 中的坐标轴的创建(下篇):坐标轴与轴标签的具体实现

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

若依前后分离版集成积木报表嵌入菜单

今天主要是分享积木报表如何嵌入若依项目菜单&#xff0c;上一篇文件已经分享过若依集成积木报表&#xff0c;这里就不再多费口舌了&#xff0c;有需要的朋友可以移步上一篇文章查看&#xff1a;若依前后分离版集成积木报表-CSDN博客 1、首先是后端配置&#xff1a; 1.1…

【进阶OpenCV】 (11)--DNN板块--实现风格迁移

文章目录 DNN板块一、DNN特点二、DNN函数流程三、实现风格迁移1. 图像预处理2. 加载星空模型3. 输出处理 总结 DNN板块 DNN模块是 OpenCV 中专门用来实现 DNN(Deep Neural Networks,深度神经网络) 模块的相关功能&#xff0c;其作用是载入别的深度学习框架(如 TensorFlow、Caf…

KANO模型,用户需求与产品设计的必备技能!

在竞争日益激烈的市场中&#xff0c;了解客户需求并提供符合客户期望的产品和服务变得尤为重要。那么有没有一种方法可以作为参考呢&#xff1f;今天小编就带大家了解一下KANO模型。KANO模型&#xff08;Kano Model&#xff09;作为一种帮助企业识别和优先处理客户需求的工具&a…

Django操作数据库

Django操作数据库 1、ORM框架2、ORM-创建数据库3、ORM-连接数据库4、ORM-操作表4.1、类创建表4.2、修改表结构4.2.1、删除表结构4.2.2、新增表结构 5、ORM-增删改查5.1、新增数据5.2、删除数据5.3、查询数据5.4、更新数据 1、ORM框架 Django开发操作数据库很简单&#xff0c;内…

项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/143105881 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

如何解决JMeter响应数据乱码?

问题&#xff1a; 解决&#xff1a; 1、找到JMeter安装目录下的bin目录 2、 在bin目录下&#xff0c;打开" jmeter.properties "文件 3、搜索"sampleresult.default.encoding" 4、改成"sampleresult.default.encodingUTF-8"&#xff0c;去掉前面…

数字图像处理:图像分割应用

数字图像处理&#xff1a;图像分割应用 图像分割是图像处理中的一个关键步骤&#xff0c;其目的是将图像分成具有不同特征的区域&#xff0c;以便进一步的分析和处理。 1.1 阈值分割法 阈值分割法&#xff08;Thresholding&#xff09;是一种基于图像灰度级或颜色的分割方法&…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片&#xff0c;直接使用QNetworkAccessManager和QHttpMultipart类即可&#xff0c;其他博文中有分享。 主要是平台接口对所传输图片有要求&#xff1a;需要包含GPS信息&#xff08;经度、纬度、高度&#xff09;。 Qt无法直接实现&#xff0c;…

教育平台的创新设计:Spring Boot实现

3系统分析 3.1可行性分析 通过对本信息化在线教学平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本信息化在线教学平台采用Spring Boot框架&#xff0c;JA…

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

Axure重要元件三——中继器修改数据

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;中继器修改数据 主要内容&#xff1a;显示编辑内容、表格赋值、修改数据 应用场景&#xff1a;更新行、表单数据行修改 案例展示&#xff1a; 正文…