加速 Python for 循环

news2024/9/29 16:01:26

在 Python 编程中,for 循环是开发者常用的工具之一,但它的执行速度经常让人感到不满。幸运的是,有许多方法可以显著提高 for 循环的效率。

本文将介绍几种简单而高效的优化技巧,帮助你加速Python for 循环,速度提升从1.3倍到惊人的900倍!让我们通过实际示例来看看如何做到这一点。

  •  这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)

1. 使用列表推导式:速度翻倍

使用传统的 for 循环进行列表操作虽然直观,但效率不高。通过使用 列表推导式,你可以让代码更简洁,并且速度提升接近 2倍。

传统方式:
def test_01_v0(numbers):  output = []  for n in numbers:      output.append(n ** 2.5)  return output
使用列表推导式:
def test_01_v1(numbers):  output = [n ** 2.5 for n in numbers]  return output

结果显示,使用列表推导式的代码执行速度提高了 2倍。

2. 在循环外计算长度:加速 1.6 倍

如果你在循环中多次计算列表的长度,那就浪费了宝贵的时间。将长度计算移到循环外,可以节省不必要的计算开销。

传统方式:​​​​​​​
def test_02_v0(numbers):  output_list = []  for i in range(len(numbers)):      output_list.append(i * 2)  return output_list
改进方式:​​​​​​​
def test_02_v1(numbers):  length = len(numbers)  output_list = []  for i in range(length):      output_list.append(i * 2)  return output_list

这个改进可以带来 1.6倍 的加速。

3. 使用Set进行比较:速度提升498倍

当你需要在嵌套 for 循环中进行查找时,使用集合(set)可以显著提高速度。因为 set 的查找速度比 list 快得多。

传统方式:​​​​​​​
def test_03_v0(list_1, list_2):  common_items = []  for item in list_1:      if item in list_2:          common_items.append(item)  return common_items
使用Set优化:​​​​​​​
def test_03_v1(list_1, list_2):  s_1 = set(list_1)  s_2 = set(list_2)  return list(s_1.intersection(s_2))

通过这种优化,速度提升了 498倍!

4. 跳过不相关的迭代:效率翻倍

有时,跳过不必要的迭代可以显著提高性能。在下例中,我们只需要找到第一个满足条件的元素,而不是全部遍历列表。

传统方式:​​​​​​​
def function_do_something(numbers):  for n in numbers:      square = n * n      if square % 2 == 0:          return square  return None
改进方式:​​​​​​​
def function_do_something_v1(numbers):  even_numbers = [n for n in numbers if n % 2 == 0]  for n in even_numbers:      return n * n  return None

通过这种方法,性能提升了 1.94倍。

5. 使用生成器:速度提升22倍

生成器通过 延迟求值,减少了内存的使用,并且对于处理大型数据集非常有效。使用生成器可以显著提高效率。

传统方式:​​​​​​​
def test_08_v0(n):    f_list = [0, 1]    for i in range(2, n + 1):        f_list.append(f_list[i - 1] + f_list[i - 2])    return f_list[n]
使用生成器:​​​​​​​
def test_08_v1(n):    a, b = 0, 1    for _ in range(n):        yield a        a, b = b, a + b

生成器将速度提升了 22倍。

6. 使用map()函数:速度提升970倍

map() 是 Python 内置的高效函数,可以用于对可迭代对象中的每个元素进行操作,避免显式 for 循环。

传统方式:​​​​​​​
def test_09_v0(numbers):    output = []    for i in numbers:        output.append(i ** 2)    return output
使用 map():​​​​​​​
def test_09_v1(numbers):    return list(map(lambda x: x ** 2, numbers))

使用 map() 函数可以将代码的运行速度提升 970倍!

7. 使用Memoization:提升57倍

对于递归操作,使用 Memoization(记忆化)可以避免重复计算,从而显著提高性能。

传统方式:​​​​​​​
def fibonacci(n):  if n == 0:      return 0  elif n == 1:      return 1  return fibonacci(n - 1) + fibonacci(n - 2)
使用 lru_cache() 优化:​​​​​​​
from functools import lru_cache
@lru_cache()def fibonacci_v2(n):  if n == 0:      return 0  elif n == 1:      return 1  return fibonacci_v2(n - 1) + fibonacci_v2(n - 2)

使用 lru_cache() 后,递归函数的性能提高了 57倍。

总结一下,本文介绍了通过优化 Python for 循环来提升性能的多种方法,从列表推导式到使用生成器、map() 函数以及 Memoization。这些优化不仅能大幅提升代码的运行速度,还能让代码更简洁易读。尤其在大数据处理、复杂计算场景中,这些技巧可以节省大量的运行时间。

如果你想让你的 Python 代码跑得更快,那么赶紧试试这些优化技巧吧!

最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!

🌟 学习大礼包包含内容

Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。

超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。

实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。

华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。

互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。

👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能!

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

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

相关文章

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域,[ComfyUI]Flux以其独特的虚实结合技术,已经成为艺术家和设计师们手中的利器。今天,我们激动地宣布,[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品,经典中文元素通过AI技术重现,包…

现实版宫斗剧《OpenAI传》,正在上演!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

海外盲盒系统开发的机遇与挑战

随着全球消费市场的多元化,盲盒(Blind Box)作为一种新兴的商业模式,逐渐在各个国家和地区崭露头角。特别是在海外市场,盲盒的受欢迎程度不断攀升。这一现象引发了很多创业者和企业的关注,纷纷投入到海外盲盒…

FreeRTOS列表与列表项

1.什么是列表与列表项 列表与列表项实际上是FreeRTOS中一个大量使用的一种数据结构 1.列表 列表的概念有点像链表,在 FreeRTOS 中,列表主要用于以下几个方面: 任务的管理:FreeRTOS 使用列表来管理不同的任务,包括就…

使用Rasterio处理栅格数据——RaterIO介绍

1. 依赖关系 RasterIO 有一个C库依赖项: GDAL >=1.11 。 GDAL 本身依赖于大多数主要操作系统提供的许多其他库,也依赖于非标准 Geos 和 Proj4 库。 Python 包依赖项(另请参见requirements.txt): affine , cligj , click , enum34 , numpy 。 开发还需要(参见 requi…

keil5程序编译没错误魔术棒可以识别芯片但是就是下载报错Error: Flash Download failed - “Cortex-M3“

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、硬件查看是否连接错误二、软件查看芯片包,更新到最新版本三、Debug下载模式选择四、芯片大小选择后记…

07_矩形圆形绘制

import cv2 import numpy as np newImageInfo (600,600,3) dst np.zeros(newImageInfo,np.uint8) # 1 2 左上角 3 右下角 4 5 fill -1 >0 line w cv2.rectangle(dst,(150,380),(350,550),(150,200,100),3) # 2 center 3 r cv2.circle(dst,(250,250),(100),(0,0,255),6) …

Sunbit币昇加密交易所分析加密货币总市值回升突破2.4万亿美元

每经AI快讯,9月27日,据CoinGecko数据,加密货币总市值回升至2.402万亿美元,24小时涨幅达1.1%。 全球历史最悠久的加密货币交易所之一,总部位于旧金山,Sunbit(币昇)Sunbit已荣获美国及加拿大MSB双牌照 ▌贝莱德增持1684枚BTC&#…

考拉悠然亮相天府人工智能大会,共绘AI赋能产业升级新蓝图

9月28日,备受瞩目的天府人工智能大会在成都拉开帷幕。本次大会是电子科技大学联合重要学术团体、政府相关部门、知名高校、科研机构和企事业单位等共同打造的人工智能领域顶尖峰会。 考拉悠然作为电子科技大学在产学研创新应用领域的杰出企业代表,荣幸受…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十二章 Linux 权限管理

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

“领航计划”取得重要阶段性成果,以科创教育推进科学教育高质量发展

党的二十大报告提出“坚持教育优先发展、科技自立自强、人才引领驱动……教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑”,从根本上体现了教育、科技、人才三者之间的关联。创新作为科技发展的根本动力,创新人才的培育之基在学校教…

使用C代码接入并操作PostgreSQL数据库

使用C代码接入并操作PostgreSQL数据库 引言准备工作在Debian/Ubuntu上安装在RedHat/CentOS上安装在Windows上安装编写C程序引入头文件建立连接执行SQL语句处理查询结果关闭连接完整示例编译和运行程序注意事项结论引言 PostgreSQL是一种功能强大的开源对象关系数据库系统,广泛…

TypeError: unsupported operand type(s) for +=: ‘Dense‘ and ‘str‘

tensorflow2.0报这个错误 因为你在定义模型的时候 model Sequential(SimpleRNN(3),Dense(5, activationsoftmax) )是不是感觉少了点什么,没加[] model Sequential([SimpleRNN(3),Dense(5, activationsoftmax)] )

TypeScript 设计模式之【访问者模式】

文章目录 访问者模式:灵活的文件系统扫描器访问者模式的奥秘访问者模式有什么利与弊?如何使用访问者模式来优化你的系统代码实现案例访问者模式的主要优点访问者模式的主要缺点访问者模式的适用场景总结 访问者模式:灵活的文件系统扫描器 假如你正在开…

智能物流行业惨淡,工程师们的“灰色地带”收入揭秘

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 在智能物流行业面临挑战的当下,工程师们除了正职收入外,也在探索各种途径来增加自己的“额外收益”。 这些收入&…

微信小程序环境下的相亲交友系统源码优化

随着移动互联网的迅猛发展,微信小程序因其便捷性和易用性成为众多开发者的选择。在这样一个背景下,相亲交友系统作为连接人与人的桥梁,也逐渐融入到了小程序的生态之中。本文旨在探讨如何在微信小程序环境中优化相亲交友系统的源码&#xff0…

云计算Openstack Cinder

OpenStack Cinder是OpenStack平台中的一个重要组件,它主要提供块存储服务。 一、基本概念 定义:Cinder是OpenStack项目中的一个模块,专注于为云计算环境中的虚拟机提供持久化的块存储服务。功能:Cinder允许用户创建和管理持久化…

前端辅助工具分享(像素大厨)

引言: 我们在从事前端开发工作时,常会需要测量许多盒子的尺寸,颜色提取种种,切图,还有文字大小等信息,光从肉眼很难看出来,当然我们传统的会使用Photoshop来帮助我们完成这些工作,但…

LeetCode 第417场周赛个人题解

目录 Q1. 找出第 K 个字符 I 原题链接 思路分析 AC代码 Q2. 元音辅音字符串计数 I 原题链接 思路分析 AC代码 Q3. 元音辅音字符串计数 II 原题链接 思路分析 AC代码 Q4. 找出第 K 个字符 II 原题链接 思路分析 AC代码 Q1. 找出第 K 个字符 I 原题链接 Q1. 找出…

ethtool网络命令

1、ethtool命令描述 ethtool 是用于查询及设置网卡参数的命令。 2、查看网卡eth0信息 [rootes01 ~]# ethtool eth0 3、查看网络eth0速率 [rootmgr2 tmp]# ethtool -S eth0 4、设置网口 设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商 ethtool –s eth…