当前位置: 首页 > news >正文

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))

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

相关文章:

Python - itertools- pairwise函数的详解

前言&#xff1a; 最近在leetcode刷题时用到了重叠对pairwise,这里就讲解一下迭代工具函数pairwise,既介绍给大家&#xff0c;同时也提醒一下自己&#xff0c;这个pairwise其实在刷题中十分有用&#xff0c;相信能帮助到你。 参考官方讲解&#xff1a;itertools --- 为高效循…...

Docker可视化管理工具Portainer

Portainer简介 Portainer 是一个轻量级的、开源的容器管理工具&#xff0c;提供了一个直观的 Web 用户界面&#xff08;UI&#xff09;&#xff0c;用于管理 Docker 和 Kubernetes 环境。它简化了容器的部署、监控和管理&#xff0c;特别适合不熟悉命令行操作的用户或团队。 …...

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09; 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…...

leetcode 面试经典 150 题:有效的括号

链接有效的括号题序号20题型字符串解法栈难度简单熟练度✅✅✅ 题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须…...

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法&#xff0c;包括(反)阈值处理、(反)零值处理和截断处理&#xff0c;还学习了一种自适应处理方法&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理-灰度图像-CSDN博客 python学o…...

GBase8c aes_encrypt和aes_decrypt函数

在数据库中&#xff0c;aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别&#xff1a; 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb&#xff0c;…...

【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)

一、问题描述 题目描述 对一个数据a进行分类,分类方法为: 此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。 比如一个数据a=0x010…...

机器学习 vs 深度学习

目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练&#xff08;归纳&#xff09;和预测&#xff08;演绎&#xff09; 归纳: 从具体案例中抽象一般规律…...

flutter_学习记录_00_环境搭建

1.参考文档 Mac端Flutter的环境配置看这一篇就够了 flutter的中文官方文档 2. 本人环境搭建的背景 本人的电脑的是Mac的&#xff0c;iOS开发&#xff0c;所以iOS开发环境本身是可用的&#xff1b;外加Mac电脑本身就会配置Java的环境。所以&#xff0c;后面剩下的就是&#x…...

SpringBoot如何自定义Starter ?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot如何自定义Starter ?】面试题。希望对大家有帮助&#xff1b; SpringBoot如何自定义Starter ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring Boot 中&#xff0c;自定义 Starter 是一种将应用程…...

前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释

文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…...

WordPress果果对象存储插件

将网站上的图片等静态资源文件上传至七牛云对象存储&#xff0c;可以减轻服务器文件存储压力&#xff0c;提升静态文件访问速度&#xff0c;从而加速网站访问速度。 支持&#xff1a;阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…...

elk 安装

创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型

大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型&#xff0c;通常使用自监督学习方法通过大量无标签文本进行训练&#xff0c;是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...

OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap&#xff08;使用单位矩阵 R…...

用 Java 发送 HTML 内容并带附件的电子邮件

实现思路 首先&#xff0c;设置邮件服务器的相关属性&#xff0c;包括是否需要认证、使用的邮件协议、服务器地址、端口等。 创建一个会话对象&#xff0c;使用 Session.getInstance 方法&#xff0c;并提供邮件服务器的属性和认证信息。 创建一个 MimeMessage 对象作为邮件消…...

【Day24 LeetCode】贪心Ⅱ

一、贪心Ⅱ 1、买卖股票的最佳时机 II 122 这题第一想法是使用动态规划做&#xff0c;每天有两个状态&#xff0c;持有股票和非持有股票&#xff0c;每次计算这两个状态下的最优值。 class Solution { public:int maxProfit(vector<int>& prices) {//表示当前 没有…...

vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)

管理员管理 搭建管理员页面 在views中创建一个manager文件夹&#xff0c;并创建ManagerIndexView.vue、MangagerListView.vue、UserList.vue <!-- src/views/manager/ManagerIndexView.vue --> <template><!-- 作为一个占位符&#xff0c;用于渲染与当前 URL…...

上位机知识篇---ROS2命令行命令静态链接库动态链接库

文章目录 前言第一部分&#xff1a;ROS2命令行命令1. 基础命令&#xff08;1&#xff09;ros2 run&#xff08;2&#xff09;ros2 launch&#xff08;3&#xff09;ros2 node&#xff08;4&#xff09;ros2 topic&#xff08;5&#xff09;ros2 service&#xff08;6&#xff0…...

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...