Python - itertools- pairwise函数的详解

前言:

最近在leetcode刷题时用到了重叠对pairwise,这里就讲解一下迭代工具函数pairwise,既介绍给大家,同时也提醒一下自己,这个pairwise其实在刷题中十分有用,相信能帮助到你。

参考官方讲解:itertools --- 为高效循环创建迭代器的函数 — Python 3.13.1 文档

1.1基本用法:

itertools.pairwise(iterable)返回从iterable中获取的连续的重叠对,(同时这个只有Python3.1才支持),同时输出的迭代器二元组的数量将比输入的数量少一个;如果输入的可迭代对象少于两个值,那么它将为空:

举个例子:pairwise('ABCDEFGH')  ——> AB  BC CD DE EF FG GH

                  pairwise('A') ——> None

所以在运用时要保证适用对象不少于两个元素,否者就没有意义。

同时pairwise 的对象时可迭代的,那么许多迭代器都可以用在里面,比用用map封装一个迭代器,同时还可以实现map所指定的函数,这个衍生用法在后面会详细讲解到

1.2内在逻辑:

在了解了用法之后,我们也可以更深入的了解pairwise的实现逻辑:

def pairwise(iterable):iterator = iter(iterable)a = next(iterator, None)for b in iterator:yield a, ba = b

说明:

iter函数:用iter(object)来生成迭代器,object是指一个支持迭代的对象,第二个参数是每次元素要调用的函数,如果只是想将元素转化为可迭代的,那么可以不传入第二个参数

next函数:用next( iterable , None )从迭代中获取下一个元素,如果迭代器中没有更多的元素他会引发None,当然这个None也可以是其他响应。同时和for函数类似,只不过,next更适合于更细粒度的控制,或者处理复杂的数据结构。值得一提的是next访问同一个对象是会从上一次访问的末尾开始如果是第一次则从开头开始访问。

it = iter(['A','B','C'])
print(next(it, '没有更多元素')) # 输出 A
print(next(it, '没有更多元素')) # 输出 B
print(next(it, '没有更多元素')) # 输出 C
print(next(it, '没有更多元素')) # 输出 '没有更多元素'

yield函数 :把yield理解成return,区别在于前者返回一个可迭代的生成器对象,你可以使用for循环或者用next()方法遍历生成器来提取结果,return则是直接返回所有结果,程序终止不在运行,并且销毁局部变量。

def fun():x = 2y = 6while x < y:yield xx += 1example = fun()
# example 是一个可迭代的生成器<generator object fun at 0x0000025C491D1C00>
next(example,'No result!')
next(example,'No result!')
next(example,'No result!')
next(example,'No result!')
next(example,'No result!')
next(example,'No result!')
next(example,'No result!')
#结果:
#2
#3
#4
#5
#Nor result !

1.3运用:

运用1:

传送门:

题型属于分组循环,分组循环可以用for或者while 实现,题解参考灵神: 

class Solution:def longestContinuousSubstring(self, s: str) -> int:ans = cnt = 1for x, y in pairwise(map(ord, s)):cnt = cnt + 1 if x + 1 == y else 1ans = max(ans, cnt)return ans

用一个map创建一个可迭代的对象,并且每一个对象都用ord处理,这样写不仅更加简洁

而如果每一次都比较一下Unicode码显然不是那么方便,当然也可以做

class Solution:def longestContinuousSubstring(self, s: str) -> int:i,n = 0, len(s)ans = 0while i < n:start = ii += 1while i < n and ord(s[i])-1 == ord(s[i-1]):i += 1ans = max(ans, i - start)return ans 

运用2: 

传送门:

这也是分组循环里面典型的例题:,利用冒泡的思想直接排序

class Solution:def canSortArray(self, nums: List[int]) -> bool:n = len(nums)i = 0while i < n:start = iones = nums[i].bit_count()i += 1while i < n and nums[i].bit_count() == ones:i += 1nums[start:i] = sorted(nums[start:i])return all(x <= y for x, y in pairwise(nums))

今天的介绍到此为止,谢谢大家的观看!

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

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

相关文章

DEBERTA:具有解耦注意力机制的解码增强型BERT

摘要 近年来&#xff0c;预训练神经语言模型的进展显著提升了许多自然语言处理&#xff08;NLP&#xff09;任务的性能。本文提出了一种新的模型架构DeBERTa&#xff08;具有解耦注意力机制的解码增强型BERT&#xff09;&#xff0c;通过两种新技术改进了BERT和RoBERTa模型。第…

鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)

目录 鸿蒙模块概念 HAP entry feature har shared 使用场景 HAP、HAR、HSP介绍 HAP、HAR、HSP开发 应用的启动 AbilityStage UIAbility WindowStage Window 拉起应用到显示到前台流程 鸿蒙模块概念 HAP hap包是手机安装的最小单元&#xff0c;1个app包含一个或…

[OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)

一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念&#xff0c;实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 &#xff08;Deferred shading&#xff09;技术。 按照本文代码实现后&#xff0c;可以实现以下…

MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍

MATLAB在绘图时&#xff0c;设置线段颜色和数据点的形状与颜色是提高图形可读性与美观性的重要手段。本文将详细介绍如何在 MATLAB 中设置这些属性。 文章目录 线段颜色设置单字母颜色表示法RGB 值表示法 数据点的形状与颜色设置设置数据点颜色和形状示例代码 运行结果小结 线段…

AIGC视频生成国产之光:ByteDance的PixelDance模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍ByteDance的视频生成模型PixelDance&#xff0c;论文于2023年11月发布&#xff0c;模型上线于2024年9月&#xff0c;同时期上线的模型还有Seaweed&…

mac 电脑上安装adb命令

在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;android studio&#xff09; Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后&#xff0c;将android的adb工具所在…

# [0114] Task01 《数学建模导论》P1 解析几何与方程模型

链接&#xff1a;https://www.datawhale.cn/activity/124 整理的相关代码库 GitHub 页面链接 绪论 姜启源&#xff1a;“数学建模就是建立数学模型解决实际问题” 本质还是解应用题&#xff0c;只是曾经的“小明买糖”变成了如今的“嫦娥探月”。 SEIR 模型&#xff0c;也…

NewStar CTF week1 web wp

谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id&#xff0c;是一个占位符&#xff0c;按第二列排序用来测试列数&#xff0c;如果没有两列则会报错-1 union select 1,2 -1同样是占位符&#xff0c;union的作用是将注入语句合并到原始语句…

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…

PAT甲级-1014 Waiting in Line

题目 题目大意 一个银行有n个窗口&#xff0c;每个窗口最多站m个人&#xff0c;其余人在黄线外等候。假设k个人同时进入银行按先后次序排队&#xff0c;每个人都有相应的服务时间。每个顾客都选择最短队列站&#xff0c;如果有多个相同长度的队列&#xff0c;按序号小的站。给…

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”&#xff0c;训练数据会过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented Generati…

11 文件与IO

1 File类 1.1 基本介绍 File类代表系统中的文件对象(文件或目录)&#xff0c;位于java.io包下。 存储介质上的文件或目录在Java程序中都是用File类的实例来表示。 通过File类&#xff0c;可以实现对系统中文件或目录的操作&#xff0c;类似我们在操作系统中借助鼠标、快捷键…

Windows第一次上手鸿蒙周边

端云一体所需装备 很重要&#xff1a;C/D/E/F盘要有二三十G的可用空间&#xff01; 硬件&#xff1a;华为鸿蒙实验箱&#xff08;基础版&#xff09;》飞机板核心板环境监测板 软件&#xff1a;Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm &#xff08…

Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

财税资金数据管理一体化大屏 | 智慧金融合集

随着科技的快速进步和数字化转型的加速&#xff0c;金融、税务等机构和企业面临的数据量呈现出爆炸式增长。传统的数据分析方法早已无法胜任现代业务的需求。为此&#xff0c;许多机构开始尝试创新的软件工具来更好的管理繁琐的数据。 通过图扑软件的数据可视化大屏&#xff0c…

5. 推荐算法的最基础和最直观的认识

1.性别年龄转换为统一的计量单位 所谓推荐&#xff0c;就是替别人推荐&#xff0c;比如工厂A需要招男员工&#xff0c;希望大家推荐认识的人。那么在这里&#xff0c;就有了推荐的概念&#xff0c;限定条件是男。我们知道&#xff0c;人的性别一般分为男或者女。在这里假设把男…

【Postgres_Python】使用python脚本将多个PG数据库合并为一个PG数据库

需要合并的多个PG数据库表个数和结构一致&#xff0c;这里提供一种思路&#xff0c;选择sql语句insert插入的方式进行&#xff0c;即将其他PG数据库的每个表内容插入到一个PG数据库中完成数据库合并 示例代码说明&#xff1a; 选择一个数据库导出表结构为.sql文件&#xff08…

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis&#xff1a;半自动化的ORM框架1.1、代码示例 2、JPA&#xff1a;全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis&#xff1a;灵活的SQL控制1.1、适用场景 2、JPA&#xff1a;开发效率…

通信工程行业现状与前景2024:引领未来增长新浪潮

在当今数字化时代&#xff0c;通信工程犹如现代社会的神经系统&#xff0c;其重要性不言而喻。从日常的语音通话、信息传递&#xff0c;到复杂的工业自动化、智能交通系统&#xff0c;通信技术无处不在&#xff0c;深刻改变着人类的生活方式与社会运转模式。随着科技的持续创新…