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

Python 如何反向 `enumerate` 遍历枚举

在 Python 中enumerate()是一个常用的内置函数用于在遍历可迭代对象如列表、元组、字符串等时同时获取索引和值。但默认情况下enumerate()是从前往后遍历的。那么**如何反向enumerate遍历即从后往前获取索引和值**呢本文将介绍3 种方法实现反向enumerate并分析它们的优缺点帮助你选择最适合的方式。1. 默认enumerate()的用法首先回顾一下enumerate()的基本用法fruits[apple,banana,cherry]forindex,valueinenumerate(fruits):print(fIndex:{index}, Value:{value})输出Index: 0, Value: apple Index: 1, Value: banana Index: 2, Value: cherry默认情况下enumerate()从索引0开始正向遍历。2. 方法 1先反转列表再enumerate2.1 使用reversed()enumerate()reversed()可以反转可迭代对象然后结合enumerate()实现反向遍历fruits[apple,banana,cherry]forindex,valueinenumerate(reversed(fruits)):print(fIndex:{index}, Value:{value})输出Index: 0, Value: cherry Index: 1, Value: banana Index: 2, Value: apple问题索引0对应的是原列表的最后一个元素cherry而不是原索引2。如果需要原索引即2, 1, 0需要额外计算。2.2 修正索引获取原索引如果希望反向遍历时仍然获取原索引即2, 1, 0可以这样修改fruits[apple,banana,cherry]lengthlen(fruits)forindex,valueinenumerate(reversed(fruits)):original_indexlength-1-indexprint(fOriginal Index:{original_index}, Value:{value})输出Original Index: 2, Value: cherry Original Index: 1, Value: banana Original Index: 0, Value: apple优点逻辑清晰易于理解。缺点需要额外计算original_index代码稍显冗长。3. 方法 2使用range(len(list)-1, -1, -1)3.1 直接反向遍历索引另一种方法是先生成反向索引序列再通过索引访问元素fruits[apple,banana,cherry]foriinrange(len(fruits)-1,-1,-1):# 从 len(fruits)-1 到 0步长 -1print(fIndex:{i}, Value:{fruits[i]})输出Index: 2, Value: cherry Index: 1, Value: banana Index: 0, Value: apple优点直接获取原索引无需额外计算。适用于需要索引的场景如修改列表元素。缺点需要手动通过索引访问元素代码稍显繁琐。3.2 结合enumerate()不推荐虽然可以尝试结合enumerate()但这种方式不推荐因为enumerate()本身不直接支持反向遍历fruits[apple,banana,cherry]reversed_enum((len(fruits)-1-i,fruits[len(fruits)-1-i])foriinrange(len(fruits)))forindex,valueinreversed_enum:print(fIndex:{index}, Value:{value})输出Index: 2, Value: cherry Index: 1, Value: banana Index: 0, Value: apple缺点代码复杂可读性差。不如直接用range(len(list)-1, -1, -1)简洁。4. 方法 3自定义反向enumerate函数4.1 实现reversed_enumerate()可以封装一个自定义函数模拟反向enumeratedefreversed_enumerate(iterable):return((len(iterable)-1-i,item)fori,iteminenumerate(iterable))fruits[apple,banana,cherry]forindex,valueinreversed_enumerate(fruits):print(fIndex:{index}, Value:{value})输出Index: 2, Value: cherry Index: 1, Value: banana Index: 0, Value: apple优点代码简洁可复用。直接获取原索引和值。缺点需要额外定义函数但可以封装成工具函数。4.2 使用生成器表达式更 Pythonic也可以直接用生成器表达式实现fruits[apple,banana,cherry]reversed_enum((len(fruits)-1-i,fruits[i])foriinrange(len(fruits)-1,-1,-1))forindex,valueinreversed_enum:print(fIndex:{index}, Value:{value})输出Index: 2, Value: cherry Index: 1, Value: banana Index: 0, Value: apple优点无需额外函数适合一次性使用。缺点代码稍长可读性略差。5. 最佳实践推荐方法适用场景代码简洁性可读性reversed(enumerate(...)) 计算索引需要反向遍历但索引从0开始⭐⭐⭐⭐range(len(list)-1, -1, -1)需要原索引且可能修改元素⭐⭐⭐⭐⭐⭐自定义reversed_enumerate()需要频繁反向enumerate⭐⭐⭐⭐⭐⭐⭐⭐推荐如果只是偶尔反向遍历使用range(len(list)-1, -1, -1)最简单。如果需要频繁反向enumerate封装成reversed_enumerate()函数更优雅。6. 完整代码示例6.1 方法 1reversed() 计算索引fruits[apple,banana,cherry]lengthlen(fruits)forindex,valueinenumerate(reversed(fruits)):original_indexlength-1-indexprint(fOriginal Index:{original_index}, Value:{value})6.2 方法 2range(len(list)-1, -1, -1)fruits[apple,banana,cherry]foriinrange(len(fruits)-1,-1,-1):print(fIndex:{i}, Value:{fruits[i]})6.3 方法 3自定义reversed_enumerate()defreversed_enumerate(iterable):return((len(iterable)-1-i,item)fori,iteminenumerate(iterable))fruits[apple,banana,cherry]forindex,valueinreversed_enumerate(fruits):print(fIndex:{index}, Value:{value})7. 总结方法代码示例特点reversed() 计算索引enumerate(reversed(fruits))length - 1 - index适用于简单反向遍历range(len(list)-1, -1, -1)for i in range(len(fruits)-1, -1, -1)直接获取原索引推荐自定义reversed_enumerate()def reversed_enumerate(iterable): ...代码优雅可复用关键点reversed()enumerate()可以反向遍历但索引需要额外计算。range(len(list)-1, -1, -1)是最直接的方式适合需要原索引的场景。自定义reversed_enumerate()适合频繁使用提高代码可读性。8. 扩展应用反向遍历 修改列表元素fruits[apple,banana,cherry]foriinrange(len(fruits)-1,-1,-1):fruits[i]fruits[i].upper()# 反向修改元素print(fruits)# 输出: [APPLE, BANANA, CHERRY]反向遍历字典Python 3.7 字典有序d{a:1,b:2,c:3}forkeyinreversed(list(d.keys())):print(f{key}:{d[key]})9. 参考链接Pythonenumerate()官方文档Pythonreversed()官方文档Pythonrange()官方文档希望这篇文章能帮助你掌握Python 反向enumerate遍历的方法 如果有任何问题欢迎留言讨论

相关文章:

Python 如何反向 `enumerate` 遍历枚举

在 Python 中,enumerate() 是一个常用的内置函数,用于在遍历可迭代对象(如列表、元组、字符串等)时同时获取索引和值。但默认情况下,enumerate() 是从前往后遍历的。那么,**如何反向 enumerate 遍历&#x…...

Hunyuan-MT-7B企业部署案例:出海SaaS公司集成Pixel Language Portal构建内部翻译中台

Hunyuan-MT-7B企业部署案例:出海SaaS公司集成Pixel Language Portal构建内部翻译中台 1. 项目背景与挑战 随着全球化业务扩张,某出海SaaS公司面临多语言支持的核心痛点: 翻译需求激增:产品文档、用户界面、客服对话等需要支持3…...

M2LOrder模型Python爬虫实战:应对动态渲染与数据加密网站

M2LOrder模型Python爬虫实战:应对动态渲染与数据加密网站 最近有个朋友找我帮忙,说他们公司需要从某个网站上抓取一些商品数据,但试了好几个爬虫工具都搞不定。我一看,好家伙,这网站不仅数据是页面加载完才动态生成的…...

别再给云存储打工了!手把手教你用飞牛NAS搭建低成本监控中心,守护小店每一分钱。

对于个体商户来说,监控是刚需,但传统的方案要么一次性投入巨大,要么长期订阅云存储费用高昂。本文将介绍一种基于 飞牛NAS 萤石摄像头 的本地化监控方案,旨在帮助商户省钱、好用、省心,实现监控成本的显著降低。&…...

高效代码分析利器:cloc工具全场景使用指南

1. 为什么你需要cloc这个代码统计神器 第一次接手一个遗留项目时,我盯着密密麻麻的目录树发愁:这堆代码到底有多少实际内容?注释占比多少?不同语言的文件各有多少?直到同事推荐了cloc工具,输入一行命令就得…...

从Prompt到成稿|像素剧本圣殿输入剧情大纲→输出标准剧本全流程

从Prompt到成稿|像素剧本圣殿输入剧情大纲→输出标准剧本全流程 1. 工具介绍:像素剧本圣殿 像素剧本圣殿是一款基于Qwen2.5-14B-Instruct大模型深度优化的专业剧本创作工具。它将先进的AI文本生成能力与独特的8-Bit复古视觉风格相结合,为编…...

3个步骤突破微信小程序渲染瓶颈:pixi-miniprogram的WebGL性能革新实践

3个步骤突破微信小程序渲染瓶颈:pixi-miniprogram的WebGL性能革新实践 【免费下载链接】pixi-miniprogram 一个可运行于微信小程序的PIXI引擎,通过模拟window环境,有些功能小程序无法模拟,就直接修改了PIXI引擎代码,最…...

【原创】金三银四末班车!4个高薪安全岗,2W月短期项目、百万年薪云架构师,速来!

【原创】金三银四末班车!4个高薪安全岗,2W/月短期项目、百万年薪云架构师,速来! 金三银四虽然接近尾声,但好岗位从不等人!这次我们挖到了4个含金量超高的信息安全岗位,覆盖北京、深圳、上海、厦…...

电商人必看!RMBG-2.0轻量抠图实战:证件照换背景+短视频素材一键生成

电商人必看!RMBG-2.0轻量抠图实战:证件照换背景短视频素材一键生成 还在为商品图片抠图发愁吗?每天处理几十张产品图,用PS一点点抠边缘,既费时间又费眼睛?或者需要给员工批量制作证件照,但换背…...

intv_ai_mk11开源可部署实践:支持Webhook回调,可对接企业微信/钉钉/飞书通知

intv_ai_mk11开源可部署实践:支持Webhook回调,可对接企业微信/钉钉/飞书通知 1. 项目概述 intv_ai_mk11是一款基于Llama架构的AI对话机器人,拥有7B参数规模,能够运行在GPU服务器上。这个开源项目不仅提供了强大的对话能力&#…...

2026金三银四变天了:企业要的是能用的人,不是“有潜力的人“

2026金三银四变天了:企业要的是"能用的人",不是"有潜力的人" 3月了,又到了传说中的"金三银四"。 往年这个时候,朋友圈里都是"拿到offer了""跳槽涨薪30%"的好消息。但今年&…...

AutoHotkey自动化效率提升指南:从入门到进阶的全场景应用技巧

AutoHotkey自动化效率提升指南:从入门到进阶的全场景应用技巧 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.co…...

Pixel Aurora Engine 辅助UI/UX设计:自动生成界面原型与素材

Pixel Aurora Engine 辅助UI/UX设计:自动生成界面原型与素材 1. 设计效率的革命性提升 想象一下这样的场景:产品经理刚描述完"我们需要一个社交App的登录页,要简洁现代感,带点科技风",几分钟后&#xff0c…...

当AI学会“越狱“与“签名“:大模型 安全的攻与防

当AI学会"越狱"与"签名":大模型安全的攻与防引言2023年以来,以ChatGPT、GPT-4、LLaMA、Qwen为代表的大语言模型(Large Language Models, LLMs)席卷了几乎所有行业。然而,能力越大,风险…...

SPI Flash性能翻倍秘籍:RT-Thread下W25Q的QSPI模式实战

SPI Flash性能翻倍秘籍:RT-Thread下W25Q的QSPI模式实战 在IoT设备开发中,存储性能往往是系统瓶颈之一。传统SPI接口的Flash存储器虽然成本低廉,但在高速数据读写场景下显得力不从心。本文将深入探讨如何通过QSPI模式充分释放W25Q系列Flash的潜…...

Phi-4-mini-reasoning在LSTM时间序列预测中的应用与优化

Phi-4-mini-reasoning在LSTM时间序列预测中的应用与优化 1. 当传统预测遇上智能推理 时间序列预测一直是数据分析领域的经典难题。无论是股票价格波动还是商品销量变化,传统的LSTM模型虽然能捕捉时间依赖关系,但面对突发新闻事件或政策变化时&#xff…...

语言的边界,与软件的命运

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

深入解析SCB_AIRCR:STM32中断与复位控制的关键寄存器

1. SCB_AIRCR寄存器:STM32的中枢神经 第一次接触STM32的中断系统时,我对着密密麻麻的寄存器列表发懵,直到发现了SCB_AIRCR这个"控制中枢"。它就像城市交通指挥中心,决定着所有中断车辆的通行规则。这个位于0xE000ED00地…...

Synopsys AXI VIP实战:如何用reorder和delay配置模拟真实SoC总线行为

Synopsys AXI VIP实战:用reorder与delay构建高保真SoC总线模拟环境 在SoC验证领域,AXI总线协议的复杂性常常成为验证工程师面临的主要挑战。当CPU通过Cache访问低速外设时,总线上的竞争、延迟和乱序响应会形成难以预测的行为模式。Synopsys A…...

一、BLE入门:从广播信道到报文解析,构建无线连接基石

1. BLE技术入门:无线世界的敲门砖 第一次接触BLE技术时,我完全被那些专业术语搞懵了。什么广播信道、报文解析,听起来就像天书一样。但当我真正动手调试一个智能手环项目后,才发现BLE其实就像两个人在嘈杂的教室里传纸条——需要…...

从‘够用’到‘好用’:聊聊Artix-7 FPGA在工业视频处理中的那些‘甜点’级设计

从‘够用’到‘好用’:Artix-7 FPGA在工业视频处理中的设计哲学 工业视频处理领域正经历一场静默的革命——当4K/8K超高清、120fps高帧率成为行业热词时,真正推动生产线变革的却是那些在成本与性能间找到完美平衡点的解决方案。Artix-7系列FPGA&#xf…...

智能提取B站字幕:告别手动抄录的高效开源工具

智能提取B站字幕:告别手动抄录的高效开源工具 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为手动记录B站视频字幕而烦恼?BiliBiliC…...

企业信息化升级必备:OA系统的功能与优势

企业信息化升级,OA系统开启高效办公新时代在当今数字化飞速发展的时代,企业的信息化升级已成为提升竞争力的关键。而OA系统,作为企业办公自动化的核心工具,正逐渐成为企业高效办公的新标配。一、OA系统的重要性OA系统,…...

2024电子数据取证实战:从手机取证到恶意APP逆向分析

1. 手机取证实战入门:从ADB到蓝牙MAC地址追踪 手机取证是电子数据取证中最常见的场景之一。去年我参与处理的一起案件中,嫌疑人通过恶意APP窃取了受害者通讯录,当时就是通过ADB连接记录锁定了关键证据。先说说ADB这个基础但极其重要的工具。 …...

98. 未使用的机器配置(rke-machine-config.cattle.io)在 Rancher v2.10+ 中会自动清理

Environment 环境 SUSE Rancher Prime v2.10.x till v2.11.x SUSE Rancher Prime v2.10.x 到 v2.11.xRKE2VMware vSphereAWS EC2 Situation 地理位置After upgrading to Rancher v2.10, VmwarevsphereConfigs created via Terraform (rancher2_machine_config_v2) are automa…...

网页资源提取工具:猫抓开源方案解决媒体获取难题

网页资源提取工具:猫抓开源方案解决媒体获取难题 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化学习与研究的过程中&#xff…...

巴旦木脱青皮的设计【solidworks三维、cad图纸、论文、答辩稿】

巴旦木脱青皮设计是农产品加工领域的关键环节,其核心作用在于通过机械结构与工艺参数的协同优化,实现青皮与果仁的高效分离,同时避免果仁损伤。该设计需综合考虑物料特性、动力传递效率及设备稳定性,通过三维建模与二维图纸的精准…...

如何高效使用猫抓cat-catch:5个关键技巧完全指南

如何高效使用猫抓cat-catch:5个关键技巧完全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的情况&#xff1a…...

千问3.5-2B与Dify平台结合:无需编码快速搭建AI应用

千问3.5-2B与Dify平台结合:无需编码快速搭建AI应用 1. 为什么需要低代码AI开发平台 想象一下,你是一家电商公司的运营负责人,每天需要处理大量客户咨询、生成商品描述、制作营销文案。传统方式要么需要雇佣专业团队,要么得自己学…...

STC89C52抢答器DIY避坑指南:从万能板焊接调试到常见故障排查(蜂鸣器不响、按键失灵)

STC89C52抢答器DIY避坑指南:从万能板焊接调试到常见故障排查 在电子制作领域,抢答器是一个经典的单片机实践项目。不同于市面上现成的模块化套件,使用万能板手工焊接STC89C52抢答器不仅能深入理解电路原理,更能锻炼实际动手能力。…...