Python学习教程:集合操作的详细教程
前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
Python中有两种可以遍历的容器类型:
-
序列类型:包含字符串、列表、元祖
序列类型是线性表,就像数组一样,是在内存中开辟一块连续空间,连续存储的,
那么查找某个元素时就需要从头开始租个对比,因此序列的查询效率是O(n),
即一个长度为n的序列查询一个变量是否在其中一般需要n次操作。
-
映射(哈希)类型:包含字典、集合
映射类型是散列表,是基于哈希(Hash)算法的,变量在映射中的存储位置是通过计算得出来的,
存取时,通过Hash计算出其应该存放的位置,存入,查找时,通过Hash计算其存放的位置,取出,
因此映射类型的查询效率是O(1),即无论数据量多大,查询永远只需要一次操作。
在Hash算法中,不同的变量计算出的位置是唯一的,而为了同一个变量每次计算出的位置不变,就要求变量是不可变的类型。
在Python中不可变的类型包括:None、数字(整型、浮点型、布尔型)、字符串、元祖,即可哈希的。
而列表、字典、集合这些容器类型,长度是不固定的,因此是不可哈希的,即不可作为Hash的键。
Python的字典是一种非常典型的Hash类型(Java中称为HashMap),即由定长的key计算出地址存放value。
因此字典的key支持None、数字(整型、浮点型、布尔型)、字符串、元祖。
如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码
以下都是合法的字典。
{'name': 'kevin', 'age': 12, 'skills': ['python', 'java']}
{1: 'kevin', 2: 'eric'}
{True: 1, False: 0, None: -1}
{('kevin', 'cn'): {'name': 'keviin', 'age': 12}}
当我们只需要存储key不需要value时就得到一个集合类型,如
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
s = {'hello', 'hi', 'how are you'}
print(type(s))
打印出来是集合set类型。
注意:创建空集合不能用s = {},这样s是字典类型,空集合应使用s = set()创建。
身为一种哈希类型,集合中的元素同样要求是定长的,即可哈希的,支持None、数字(整型、浮点型、布尔型)、字符串、元祖几种类型,同时集合中的元素不可重复。
在日常使用中,相对于列表、字典来说集合的出镜率不高,然而通过集合可以高效的完成一些操作,如。
1.列表去重(注意会改变原有顺序)
l = [3,2,1,5,6,3,2,6,1,4]
l2 = list(set(l))
转为集合是会自动去重并排序,在转回列表得到[1, 2, 3, 4, 5, 6]。
2. 交集、并集、差集
这就是我们中学学的集合运算,在两组数据对比时是非常有效的,比如我们有两组数据。
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
l1 = ['kevin', 'eric', 'lily', 'niudun', 'sofia', 'lisi']
l2 = ['sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi']
如何快速找出两者的差异呢?
# 转为集合
s1 = set(l1)
s2 = set(l2)# 并集:两者中全部的,并去重
all = list(s1 | s2) # 得到 ['niudun', 'sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi', 'lily', 'eric', 'kevin']# 交集:两者重复的部分
same = list(s1 & s2) # 得到 ['lisi', 'sofia']# 差集:l1中有l2没有的
diff = list(s1 - s2) # 得到 ['lily', 'eric', 'kevin', 'niudun'], 也可以`s2-s1`得到l2中有l1中没有的
同样,字典的.keys()得到的字典的所有键值是一种类似集合的类型,
当字典每一个value值不包含可变类型(即没有嵌套列表、字典)时,
字典的.items()方法同样支持集合操作。
d1 = {'name': 'kevin', 'age': 14, 'gender': 'male', 'class': 15, 'grade': 9, 'chinese': 94, 'math': 63, 'english': 82}
d2 = {'english': 82, 'age': 14, 'class': 15, 'chinese':94,'name': 'kevin', 'gender': 1, 'zhengzhi': 79, 'grade': 9}
假设我们要对比两组数据的不同
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# d1中有d2中没有的key
d1.keys() - d2.keys() # 得到 {'math'}# d2中有的d1中没有的key
d2.keys() - d1.keys() # 得到 {'zhengzhi'}# d1中和d2中不同的项目
```python
d1.items() - d2.items() # {('math', 63), ('gender', 'male')}
d2.items() - d1.items() # {('zhengzhi', 79), ('gender', 1)}
使用.items()做集合操作时要求字典无嵌套列表、字典等可变类型
尾语
好了,今天的分享就差不多到这里了!
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!
相关文章:

Python学习教程:集合操作的详细教程
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 Python中有两种可以遍历的容器类型: 序列类型:包含字符串、列表、元祖 序列类型是线性表,就像数组一样,是在内存中开辟一块连续空间,连续存储的, 那么查找…...

球球的排列
题目传送门 引 计数DP,好像特别经典,有两种做法,我只会 O ( n 3 ) O(n^3) O(n3),有 O ( n 2 ) O(n^2) O(n2)的 解法 首先, 若 x y p 2 且 x z q 2 , 则 y z ( p q x ) 2 若xyp^2且xzq^2,则yz(\frac{pq}{x} )^2 若xyp2且xzq2,则yz(xpq…...

1783_CMD启动MATLAB同时执行一个脚本
全部学习汇总: GitHub - GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes…...

C语言中内存分配的几种方式
目录 C语言中内存分配的几种方式静态内存分配栈内存分配堆内存分配内存映射文件 C语言中内存分配的几种方式 静态内存分配 静态内存分配是在程序编译时分配内存,通常用于全局变量和静态变量。这些变量的内存空间在程序的整个运行期间都是存在的。 栈内存分配 栈内存…...

组相联cache如何快速实现cache line eviction并使用PMU events验证
如何快速实现cache line eviction 一,什么是cache hit、miss、linefill、evict ?1.1 如果要程序员分别制造出cache hit、miss、linefill、evict这四种场景,该怎么做? 二,实现cache line eviction的方法1.1 直接填充法3…...

【Stable Diffusion安装】支持python3.11 window版
前言 主要的安装步骤是参考B站播放量第一的视频,但是那位阿婆主应该是没有编程经验,只强调使用3.10,而python最新版本是3.11。 理论上来说,只是一个小版本的不同,应该是可以安装成功了。自己摸索了下,挺费…...

Anycloud37D平台移植wirelesstools
0. 环境准备 下载 :https://www.linuxfromscratch.org/blfs/view/svn/basicnet/wireless_tools.html 1. 交叉编译wireless_tools tar xzf wireless_tools.29.tar.gz cd wireless_tools.29/打开Makefile,修改配置: ## Compiler to use (mo…...

海康机器人工业相机 Win10+Qt+Cmake 开发环境搭建
文章目录 一. Qt搭建海康机器人工业相机开发环境 一. Qt搭建海康机器人工业相机开发环境 参考这个链接安装好MVS客户端 Qt新建一个c项目 cmakeList中添加海康机器人的库,如下: cmake_minimum_required(VERSION 3.5)project(HIKRobotCameraTest LANG…...

使用MDK5的一些偏僻使用方法和谋个功能的作用
程序下载后无法运行 需要勾选如下库,是优化后的库; MicroLib和标准C库之间的主要区别是: 1、MicroLib是专为深度嵌入式应用程序而设计的。 2、MicroLib经过优化,比使用ARM标准库使用更少的代码和数据内存。 3、MicroLib被设计成在没有操作…...

【实战】十一、看板页面及任务组页面开发(六) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十八)
文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

在 Amazon 搭建无代码可视化的数据分析和建模平台
现代企业常常会有利用数据分析和机器学习帮助解决业务痛点的需求。如制造业中,利用设备采集上来的数据做预测性维护,质量控制;在零售业中,利用客户端端采集的数据做渠道转化率分析,个性化推荐等。 亚马逊云科技开发者…...

Pinely Round 2 (Div. 1 + Div. 2) G. Swaps(组合计数)
题目 给定一个长度为n(n<1e6)的序列,第i个数ai(1<ai<n), 操作:你可以将当前i位置的数和a[i]位置的数交换 交换可以操作任意次,求所有本质不同的数组的数量,答案对1e97取模 思路来源 力扣群 潼神 心得 感…...

elasticSearch+kibana+logstash+filebeat集群改成https认证
文章目录 一、生成相关证书二、配置elasticSearh三、配置kibana四、配置logstash五、配置filebeat六、连接https es的java api 一、生成相关证书 ps:主节点操作 切换用户:su es 进入目录:cd /home/es/elasticsearch-7.6.2 创建文件&#x…...

GPT带我学-设计模式-迭代器模式
1 什么是迭代器设计模式? 迭代器设计模式是一种行为型设计模式,用于提供一种统一的方式来遍历一个集合对象中的元素,而不需要暴露该对象的内部结构。它将集合对象的遍历操作与集合对象本身分离开来,使得遍历操作可以独立于集合对…...

数学建模--层次分析法(AHP)的Python实现
目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ AHP:层次分析法,层次分析法还是比较偏向于主观的判断的,所以在建模的时候尽可能不要去使用层次分析法 不过在某些创新的评价方法上,也是能够运用层次分析使得评价变得全面一些,有可…...

机器学习笔记之最优化理论与方法(三)凸集的简单认识(下)
机器学习笔记之最优化理论与方法——凸集的简单认识[下] 引言回顾:基本定义——凸集关于保持集合凸性的运算仿射变换 凸集基本性质:投影定理点与凸集的分离支撑超平面定理 引言 继续凸集的简单认识(上)进行介绍,本节将介绍凸集的基本性质以及…...

Apipost:API文档、调试、Mock与测试的一体化协作平台
随着数字化转型的加速,API(应用程序接口)已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中,API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台,旨在解决这些问题…...

Homebrew下载安装及使用教程
Homebrew是什么? 简单来说,就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…...

【Codeforces】CF193D Two Segments
题目链接 CF方向 Luogu方向 题目解法 考虑在值域上的问题:有多少段区间,对应在排列上不超过 2 2 2 段 肯定需要枚举一个端点,另一个快速算出,考虑枚举值域区间右端点 r r r,计算 l l l 可以发现,新增…...

内存管理概述
前言 在学习计算机科学时,内存管理是一个非常重要的概念。简单地说,内存是计算机用来存储和访问数据的地方。而内存管理是计算机系统如何分配、使用和管理内存的过程。 为什么要学习内存管理? 1. 高效性:内存管理能够帮助计算机更…...

Spring的重试机制-SpringRetry
在我们的日常开发中,经查会遇到调用接口失败的情况,这时候就需要通过一些方法来进行重试,比如通过while循环手动重复调用或,或者通过记录错误接口url和参数到数据库,然后手动调用接口,或者通过JDK/CGLib动态…...

水稻叶病害数据集(目标检测,yolo使用)
1.数据集文件夹 train文件夹(44229张),test文件夹(4741张),valid文件夹(6000张) 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…...

鸿蒙系列-如何使用好 ArkUI 的 @Reusable?
如何使用好 ArkUI 的 Reusable? OpenHarmony 组件复用机制 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为 系统组件,由开发者定义的称为 自定义组件。 在进行 UI 界面开发时,通常不是简单的将系统组件进行组合…...

展锐平台音频框架
Audio DT介绍 1.概述 DT(Device Tree)是一种描述硬件的数据结构,DTS即设备树源码。 2.Audio DTS 文件架构 \bsp\kernel\kernel.4.14\arch\arm64\boot\sprd ums512.dts //SOC级相关节点 ——sc2730.dtsi //Codec ——sharkl5Pro.dts…...

webpack loader和plugins的区别
在Webpack中,Loader和Plugin是两个不同的概念,用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入,并将其转换为Webpack可以处理的模块。例如,当您在Webpack配置中使用Babel Loader时&…...

适配器模式:接口的平滑过渡
欢迎来到设计模式系列的第七篇文章!在前面的几篇文章中,我们已经学习了一些常见的设计模式,今天我们将继续探讨另一个重要的设计模式——适配器模式。 适配器模式简介 适配器模式是一种结构型设计模式,它主要用于将一个类的接口…...

vscode搭建springboot开发环境
前言 idea好用到但是收money,eclipse免费但是界面有点丑,所以尝试使用vscode开发springboot 提前准备 安装jdk,jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…...

SpringMVC-学习笔记
文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…...

【STM32】学习笔记(TIM定时器)
TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且…...

Jdk8 动态编译 Java 源码为 Class 文件(三)
Jdk8 动态编译 Java 源码为 Class 文件 一.JDK版本二.工程介绍1.依赖2.启动类3.配置类(用于测试依赖注入)4.工具类1.Java 源码文件读取类2.SpringBoot 容器实例管理类 5.测试类1.抽象类2.接口类3.默认抽象实现4.默认接口实现 6.接口类1.测试接口2.类重载…...