全网最适合入门的面向对象编程教程:39 Python常用复合数据类型-集合

news/2024/11/17 10:51:59/文章来源:https://www.cnblogs.com/FreakEmbedded/p/18381751

全网最适合入门的面向对象编程教程:39 Python 常用复合数据类型-集合

image

摘要:

在 Python 中,集合(set)是一种常用的复合数据类型。集合是一组无序且不重复的元素。与列表和元组不同,集合中的元素是无序的,并且每个元素只能出现一次。

原文链接:

FreakStudio的博客

往期推荐:

学嵌入式的你,还不会面向对象??!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类

全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用

全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图

全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释

全网最适合入门的面向对象编程教程:20 类和对象的Python实现-组合关系的实现与CSV文件保存

全网最适合入门的面向对象编程教程:21 类和对象的Python实现-多文件的组织:模块module和包package

全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误

全网最适合入门的面向对象编程教程:23 类和对象的Python实现-抛出异常

全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理

全网最适合入门的面向对象编程教程:25 类和对象的Python实现-Python判断输入数据类型

全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句

全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总

全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用

全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程:32 Python的内置数据类型-类Class和实例Instance

全网最适合入门的面向对象编程教程:33 Python的内置数据类型-对象Object和类型Type的关系

全网最适合入门的面向对象编程教程:34 Python的内置数据类型-Python常用复合数据类型:元组和命名元组

全网最适合入门的面向对象编程教程:35 Python的内置数据类型-文档字符串和__doc__属性

全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典

全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式

全网最适合入门的面向对象编程教程:38 Python常用复合数据类型-使用列表实现堆栈、队列和双端队列

更多精彩内容可看:

给你的 Python 加加速:一文速通 Python 并行计算

一文搞懂 CM3 单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库

Avnet ZUBoard 1CG开发板—深度学习新选择

SenseCraft 部署模型到Grove Vision AI V2图像处理模块

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

Python 还支持集合这种数据类型。集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。创建集合用花括号或 set()函数。注意,创建空集合只能用 set(),不能用{},{}创建的是空字典。

在 Python 中,集合可以保存任意可求哈希值的对象,而不只是数字。可求哈希值对象是和能够用作字典类型的键一样的对象,因此列表和字典被排除在外。

和数学集合一样,它们只会存集合和字典一样,是无序的。它们都利用底层的基于哈希值的数据结构来保证高效。因为它们是无序的,故集合无法通过索引来查找元素。使用集合的主要目的是,将世界一分为二:“存在于集合中的”和“集合之外的”。很容易就可以检查某个项目是在集合中的或者遍历集合中所有的项目,但是如果想要对它们进行排序,则必须先将集合转换为列表。储对象的一份备份。

如下为集合相关操作的一些示例代码:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)
_# 检测成员是否在集合中_
print('orange' in basket)
print('crabgrass' in basket)
_# 创建两个空集合_
a = set('abracadabra')
print(a)
b = set('alacazam')
print(b)
_# 在 a 中的字母,但不在 b 中_
print(a - b)
_# 在 a 或 b 中的字母_
print(a | b)
_# 在 a 和 b 中都有的字母_
print(a & b)
_# 求 a 和 b中 非都有的字母_
print(a ^ b)

如下为运行结果:

image

这里我们列出来集合的部分操作方法,供读者参考:

方法 描述
add() 为集合添加元素。
clear() 移除集合中的所有元素。
copy() 拷贝一个集合。
difference() 返回多个集合的差集。
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素。
intersection() 返回集合的交集。
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集。
pop() 随机移除元素。
remove() 移除指定元素。
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集。
update() 给集合添加元素。
len() 计算集合元素个数。

从集合的操作方法可以明显看出,集合是用于和其他集合进行运算的,而不仅仅是一个容器。****如果有一些来自两个不同源的数据,并需要快速以某种形式组合起来,以确定数据是否重合或不同,我们可以用集合操作来快速地比较它们。或者如果输入数据可能包含重复的已经加工过的数据,我们可以用集合来比较并只处理新数据。

和列表类似,集合也支持推导式,但是当用 in 关键字检查元素是否存在于容器中时,集合比列表的效率更高。在对一个列表或集合容器使用 value in container 语法时,如果 Container 中有元素等于 value,则返回 True,否则返回 False。在列表中,这将会遍历所有对象直到找到相同的值,而对于集合来说,只需要求出哈希值并检查是否存在即可。这意味着无论集合有多大,查找一个值是否存在所需要的时间是固定的,但是对于列表来说列表长度越长搜索一个值所需要的时间就越长。

image

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

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

相关文章

网卡-模式标准

目前主流的无线WIFI网络设备一共有以下几种模式:802.11a是一种Wi-Fi标准,工作在5GHz频段,提供最高54Mbps的数据传输速率。虽然速度较快,但覆盖范围较小。802.11b是Wi-Fi的最初标准之一,工作在2.4GHz频段,提供最高11Mbps的数据传输速率。虽然速度较慢,但拥有较广的覆盖范…

记录一道 sql 注入流量分析题

学习一下下!题目:一个流量包 ddos.pcapng在ddos中寻找黑客的真实意图。提交flag格式:flag{xxxx)。思路: 分析一下流量包,过了 http 请求,不难发现,黑客在尝试登入,那肯定就是在破解密码了,那我们可以看看登入成功的包​ 然后,继续往下看流量包,可以发现登入成功的数…

网卡-频段、信道、带宽

频段 在无线通信领域中,网卡频段(频带)是指所支持的无线通信频率范围,将频率划分成多段,主要是2.4G、5G2.4GHz频段:是最常见的无线通信频段之一,2.412GHz-2.484GHz,一般用于Wi-Fi网络和蓝牙等。2.4GHz频段在各个地区都是通用的5GHz频段:这也是用于Wi-Fi网络的一个常见频…

扩展系统最佳的八种策略

扩展系统最佳的八种策略

线性规划标准型知识精解

线性规划的标准型及其转化过程是理解和求解线性规划问题的基础。通过引入松弛变量、剩余变量和将自由变量转化为两个非负变量,可以将任意形式的线性规划问题转化为标准型。标准型的线性规划问题便于使用单纯形法等算法进行求解,从而找到最优解。了解这些概念和技巧,对于深入…

高并发业务下的库存扣减技术方案设计

扣减库存需要查询库存是否足够:足够就占用库存 不够则返回库存不足(这里不区分库存可用、占用、已消耗等状态,统一成扣减库存数量,简化场景)并发场景,若 查询库存和扣减库存不具备原子性,就可能超卖,而高并发场景超卖概率会增高,超卖数额也会增高。处理超卖的确麻烦:系…

Echarts实现双x轴,支持均分和非均分的情况

效果图代码 <template><div class="app"><div class="demo" ref="demoRef"></div></div> </template><script> import * as echarts from echarts export default {data() {return {}},mounted() {th…

第一章:Linux‘’用户和组的管理‘’

第一章:Linux‘’用户和组的管理‘’@一、Linux用户身份概述@1.1 Linux用户介绍@1.2 三个重要passwd,shadow,group文件的介绍@1.2.1 passwd文件 @1.2.2 shadow文件 @1.2.3 group文件@二、创建Linux用户@2.1 添加Linux用户——useradd @2.2 设置Linux用户密码——passwd@三、…

远程观看群晖里面的视频(webdav)

前言 本文使用 webdav 服务加 tvbox 来实现远程播放群晖中的视频,关于 webdav 服务曾在[[黑群晖同步obsidian]] 中提及。本次也是使用类似的操作方式 配置黑群晖 配置 webdav 并创建共享文件夹 为了方便,此处我直接复制了黑群晖同步 obsidian 这篇博客中相关内容 首先下载套件…

远程观看群晖里面的视屏(webdav)

前言 本文使用 webdav 服务加 tvbox 来实现远程播放群晖中的视频,关于 webdav 服务曾在[[黑群晖同步obsidian]] 中提及。本次也是使用类似的操作方式 配置黑群晖 配置 webdav 并创建共享文件夹 为了方便,此处我直接复制了黑群晖同步 obsidian 这篇博客中相关内容 首先下载套件…

java连接sqlite数据库

首先下载jar包(每种数据库有自己jar包) 然后idea里创建新项目并且在项目里创建lib文件里面放jar包 接着导入jar包然后apply->ok 这样就连上 如果要可视化数据库DB Browser最后测试连接Test Connection看数据库连上没 结果:

Adobe Lightroom Classic LRC v13.5 下载及安装教程 (图像后期处理软件)

前言 Adobe Lightroom Classic为您提供强大的一键式工具和高级控件,使您的照片看起来很棒。轻松整理桌面上的所有照片,并以多种方式共享。使用Lightroom Classic,您需要具备所有桌面编辑工具,才能充分发挥照片的作用。增强色彩,使沉闷的镜头充满活力,去除分散注意力的物体…