0

0

Python 循环优化的常见技巧

舞夢輝影

舞夢輝影

发布时间:2026-01-31 18:31:02

|

754人浏览过

|

来源于php中文网

原创

推荐用 enumerate 替代 range(len(...))遍历列表,因其更高效、可读;成员检查优先用 in 而非手写循环;过滤求和等场景用生成器表达式省内存;循环内不变表达式需提前提取。

python 循环优化的常见技巧

enumerate 替代 range(len(...))

直接索引遍历列表时,range(len(my_list)) 看似直观,但会多一次 len() 调用、生成一个不必要的整数序列,且可读性差。Python 的 enumerate() 是专为此设计的内置函数,它返回 (index, item) 元组,底层用 C 实现,开销极小。

  • ✅ 推荐写法:for i, item in enumerate(my_list):
  • ❌ 避免写法:for i in range(len(my_list)): item = my_list[i]
  • 注意:如果只需要索引(不取值),仍用 range(len(...)) 更轻量;但这种情况本身往往暗示逻辑可重构

提前用 in 检查成员存在性,别写循环手动找

判断某个值是否在容器中,90% 场景下不该手写 for 循环加 break。Python 容器的 __contains__ 方法(即 in 操作)对 setdict 是 O(1),对 list 是 O(n),但底层用 C 实现,比纯 Python 循环快 3–5 倍。

  • ✅ 正确姿势:if x in my_set:(优先把查找目标转成 set
  • ❌ 过度优化:found = False; for v in my_list: if v == x: found = True; break
  • 特别注意:list 上反复 in 查找,应先转 set —— my_set = set(my_list) 的一次性开销远低于多次线性扫描

用生成器表达式替代 list 推导式做中间过滤

当循环只是为后续操作(如 sum()any()max())提供数据源,且不需要所有结果都驻留内存时,用生成器表达式(圆括号)能省下大量内存并可能提前终止。

  • ✅ 内存友好:sum(x * 2 for x in data if x > 0)
  • ❌ 浪费内存:sum([x * 2 for x in data if x > 0]) —— 先建完整列表再求和
  • 关键区别:生成器表达式不支持索引或重复遍历;若需多次使用,才考虑转成 list 或用 itertools.tee()
  • 性能提示:any()all() 天然配合生成器,遇到第一个 TrueFalse 就停,效率极高

避免在循环内重复计算不变表达式

把循环外就能确定的值、函数调用、属性访问提出来,尤其是涉及模块导入、对象方法绑定、正则编译等高成本操作。

万兴喵影
万兴喵影

国产剪辑神器

下载

立即学习Python免费学习笔记(深入)”;

  • ✅ 提前提取:pattern = re.compile(r'\d+'); for line in lines: pattern.search(line)
  • ❌ 重复执行:for line in lines: re.compile(r'\d+').search(line) —— 每次都重新编译正则
  • 常见陷阱:for item in items: item.some_method() 中,如果 some_method 是无参且返回相同结果,可提成 cached_result = item.some_method()
  • 注意:Python 不会自动优化循环内未变化的变量引用,哪怕看起来“显然不变”

真正卡顿的循环,往往不是算法复杂度问题,而是混进了隐式 I/O、重复对象创建、或没意识到某些操作本可在循环外固化。动手前先看三眼:这个计算真的必须在每次迭代里做吗?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

783

2023.08.22

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

119

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

258

2025.10.24

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

418

2023.08.14

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号