Python教程:关于循环,代码性能的优化方法

1.循环代码优化, 遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算

  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

  3. 局部变量查询较快,尽量使用局部变量

举例说明:将循环x,y取的循环值做数学x*300+y*300运算,把得到的值加入到data列表中,分别统计他们的程序用时情况。然后打印输出的结果,对比计算结果是否一致。

import time
print('1.未优化的程序用时'.center(40, '-'))
t1 = time.time()

for x in range(500):
    data1 = []
    for y in range(500):
        data1.append(x*300+y*300)
t2 = time.time()
print('用时:{:.5} s'.format(t2 - t1))

print('2.优化的程序用时'.center(40, '-'))
t3 = time.time()
for m in range(500):
    data2 = []
    c = m * 300  # 减少内层循环的计算
    for n in range(500):
        data2.append(c+n*300)

t4 = time.time()
print('用时:{:.5} s'.format(t4 - t3))
print('3.打印计算结果'.center(40, '-'))
print(data1)
print(data2)

输出结果:

---------------1.未优化的程序用时---------------``用时:0.066961 s``---------------2.优化的程序用时----------------``用时:0.04997 s``----------------3.打印计算结果----------------``[149700, 150000, 150300, 150600, 150900, 151200, 151500, 151800, 152100, 152400, 152700, 153000, 153300, 153600, 153900, 154200, 154500, 154800, 155100, 155400, 155700, 156000, 156300, 156600, 156900, 157200, 157500, 157800, 158100, 158400, 158700, 159000, 159300, 159600, 159900, 160200, 160500, 160800, 161100, 161400, 161700, 162000, 162300, 162600, 162900, 163200, 163500, 163800, 164100, 164400, 164700, 165000, 165300, 165600, 165900, 166200, 166500, 166800, 167100, 167400, 167700, 168000, 168300, 168600, 168900, 169200, 169500, 169800, 170100, 170400, 170700, 171000, 171300, 171600, 171900, 172200, 172500, 172800, 173100, 173400, 173700, 174000, 174300, 174600, 174900, 175200, 175500, 175800, 176100, 176400, 176700, 177000, 177300, 177600, 177900, 178200, 178500, 178800, 179100, 179400, 179700, 180000, 180300, 180600, 180900, 181200, 181500, 181800, 182100, 182400, 182700, 183000, 183300, 183600, 183900, 184200, 184500, 184800, 185100, 185400, 185700, 186000, 186300, 186600, 186900, 187200, 187500, 187800, 188100, 188400, 188700, 189000, 189300, 189600, 189900, 190200, 190500, 190800, 191100, 191400, 191700, 192000, 192300, 192600, 192900, 193200, 193500, 193800, 194100, 194400, 194700, 195000, 195300, 195600, 195900, 196200, 196500, 196800, 197100, 197400, 197700, 198000, 198300, 198600, 198900, 199200, 199500, 199800, 200100, 200400, 200700, 201000, 201300, 201600, 201900, 202200, 202500, 202800, 203100, 203400, 203700, 204000, 204300, 204600, 204900, 205200, 205500, 205800, 206100, 206400, 206700, 207000, 207300, 207600, 207900, 208200, 208500, 208800, 209100, 209400, 209700, 210000, 210300, 210600, 210900, 211200, 211500, 211800, 212100, 212400, 212700, 213000, 213300, 213600, 213900, 214200, 214500, 214800, 215100, 215400, 215700, 216000, 216300, 216600, 216900, 217200, 217500, 217800, 218100, 218400, 218700, 219000, 219300, 219600, 219900, 220200, 220500, 220800, 221100, 221400, 221700, 222000, 222300, 222600, 222900, 223200, 223500, 223800, 224100, 224400, 224700, 225000, 225300, 225600, 225900, 226200, 226500, 226800, 227100, 227400, 227700, 228000, 228300, 228600, 228900, 229200, 229500, 229800, 230100, 230400, 230700, 231000, 231300, 231600, 231900, 232200, 232500, 232800, 233100, 233400, 233700, 234000, 234300, 234600, 234900, 235200, 235500, 235800, 236100, 236400, 236700, 237000, 237300, 237600, 237900, 238200, 238500, 238800, 239100, 239400, 239700, 240000, 240300, 240600, 240900, 241200, 241500, 241800, 242100, 242400, 242700, 243000, 243300, 243600, 243900, 244200, 244500, 244800, 245100, 245400, 245700, 246000, 246300, 246600, 246900, 247200, 247500, 247800, 248100, 248400, 248700, 249000, 249300, 249600, 249900, 250200, 250500, 250800, 251100, 251400, 251700, 252000, 252300, 252600, 252900, 253200, 253500, 253800, 254100, 254400, 254700, 255000, 255300, 255600, 255900, 256200, 256500, 256800, 257100, 257400, 257700, 258000, 258300, 258600, 258900, 259200, 259500, 259800, 260100, 260400, 260700, 261000, 261300, 261600, 261900, 262200, 262500, 262800, 263100, 263400, 263700, 264000, 264300, 264600, 264900, 265200, 265500, 265800, 266100, 266400, 266700, 267000, 267300, 267600, 267900, 268200, 268500, 268800, 269100, 269400, 269700, 270000, 270300, 270600, 270900, 271200, 271500, 271800, 272100, 272400, 272700, 273000, 273300, 273600, 273900, 274200, 274500, 274800, 275100, 275400, 275700, 276000, 276300, 276600, 276900, 277200, 277500, 277800, 278100, 278400, 278700, 279000, 279300, 279600, 279900, 280200, 280500, 280800, 281100, 281400, 281700, 282000, 282300, 282600, 282900, 283200, 283500, 283800, 284100, 284400, 284700, 285000, 285300, 285600, 285900, 286200, 286500, 286800, 287100, 287400, 287700, 288000, 288300, 288600, 288900, 289200, 289500, 289800, 290100, 290400, 290700, 291000, 291300, 291600, 291900, 292200, 292500, 292800, 293100, 293400, 293700, 294000, 294300, 294600, 294900, 295200, 295500, 295800, 296100, 296400, 296700, 297000, 297300, 297600, 297900, 298200, 298500, 298800, 299100, 299400]``[149700, 150000, 150300, 150600, 150900, 151200, 151500, 151800, 152100, 152400, 152700, 153000, 153300, 153600, 153900, 154200, 154500, 154800, 155100, 155400, 155700, 156000, 156300, 156600, 156900, 157200, 157500, 157800, 158100, 158400, 158700, 159000, 159300, 159600, 159900, 160200, 160500, 160800, 161100, 161400, 161700, 162000, 162300, 162600, 162900, 163200, 163500, 163800, 164100, 164400, 164700, 165000, 165300, 165600, 165900, 166200, 166500, 166800, 167100, 167400, 167700, 168000, 168300, 168600, 168900, 169200, 169500, 169800, 170100, 170400, 170700, 171000, 171300, 171600, 171900, 172200, 172500, 172800, 173100, 173400, 173700, 174000, 174300, 174600, 174900, 175200, 175500, 175800, 176100, 176400, 176700, 177000, 177300, 177600, 177900, 178200, 178500, 178800, 179100, 179400, 179700, 180000, 180300, 180600, 180900, 181200, 181500, 181800, 182100, 182400, 182700, 183000, 183300, 183600, 183900, 184200, 184500, 184800, 185100, 185400, 185700, 186000, 186300, 186600, 186900, 187200, 187500, 187800, 188100, 188400, 188700, 189000, 189300, 189600, 189900, 190200, 190500, 190800, 191100, 191400, 191700, 192000, 192300, 192600, 192900, 193200, 193500, 193800, 194100, 194400, 194700, 195000, 195300, 195600, 195900, 196200, 196500, 196800, 197100, 197400, 197700, 198000, 198300, 198600, 198900, 199200, 199500, 199800, 200100, 200400, 200700, 201000, 201300, 201600, 201900, 202200, 202500, 202800, 203100, 203400, 203700, 204000, 204300, 204600, 204900, 205200, 205500, 205800, 206100, 206400, 206700, 207000, 207300, 207600, 207900, 208200, 208500, 208800, 209100, 209400, 209700, 210000, 210300, 210600, 210900, 211200, 211500, 211800, 212100, 212400, 212700, 213000, 213300, 213600, 213900, 214200, 214500, 214800, 215100, 215400, 215700, 216000, 216300, 216600, 216900, 217200, 217500, 217800, 218100, 218400, 218700, 219000, 219300, 219600, 219900, 220200, 220500, 220800, 221100, 221400, 221700, 222000, 222300, 222600, 222900, 223200, 223500, 223800, 224100, 224400, 224700, 225000, 225300, 225600, 225900, 226200, 226500, 226800, 227100, 227400, 227700, 228000, 228300, 228600, 228900, 229200, 229500, 229800, 230100, 230400, 230700, 231000, 231300, 231600, 231900, 232200, 232500, 232800, 233100, 233400, 233700, 234000, 234300, 234600, 234900, 235200, 235500, 235800, 236100, 236400, 236700, 237000, 237300, 237600, 237900, 238200, 238500, 238800, 239100, 239400, 239700, 240000, 240300, 240600, 240900, 241200, 241500, 241800, 242100, 242400, 242700, 243000, 243300, 243600, 243900, 244200, 244500, 244800, 245100, 245400, 245700, 246000, 246300, 246600, 246900, 247200, 247500, 247800, 248100, 248400, 248700, 249000, 249300, 249600, 249900, 250200, 250500, 250800, 251100, 251400, 251700, 252000, 252300, 252600, 252900, 253200, 253500, 253800, 254100, 254400, 254700, 255000, 255300, 255600, 255900, 256200, 256500, 256800, 257100, 257400, 257700, 258000, 258300, 258600, 258900, 259200, 259500, 259800, 260100, 260400, 260700, 261000, 261300, 261600, 261900, 262200, 262500, 262800, 263100, 263400, 263700, 264000, 264300, 264600, 264900, 265200, 265500, 265800, 266100, 266400, 266700, 267000, 267300, 267600, 267900, 268200, 268500, 268800, 269100, 269400, 269700, 270000, 270300, 270600, 270900, 271200, 271500, 271800, 272100, 272400, 272700, 273000, 273300, 273600, 273900, 274200, 274500, 274800, 275100, 275400, 275700, 276000, 276300, 276600, 276900, 277200, 277500, 277800, 278100, 278400, 278700, 279000, 279300, 279600, 279900, 280200, 280500, 280800, 281100, 281400, 281700, 282000, 282300, 282600, 282900, 283200, 283500, 283800, 284100, 284400, 284700, 285000, 285300, 285600, 285900, 286200, 286500, 286800, 287100, 287400, 287700, 288000, 288300, 288600, 288900, 289200, 289500, 289800, 290100, 290400, 290700, 291000, 291300, 291600, 291900, 292200, 292500, 292800, 293100, 293400, 293700, 294000, 294300, 294600, 294900, 295200, 295500, 295800, 296100, 296400, 296700, 297000, 297300, 297600, 297900, 298200, 298500, 298800, 299100, 299400]``   

2.其他方式:

连接多个字符串,使用join()而不是用+,join()是一个字符串方法,用于将一个可迭代对象(如列表或元组)的元素连接成一个字符串。这个方法需要一个字符串作为分隔符,将可迭代对象中的元素连接起来。

除了使用空格字符串作为分隔符,我们还可以使用其他任何字符串作为分隔符。例如:

words = ['apple', 'banana', 'cherry']  
result = ', '.join(words)  
print(result)  # 输出:apple, banana, cherry

列表进行元素插入和删除,尽量在列表尾部操作,使用列表的append()方法将元素插入到列表的尾部。

my_list = [1, 2, 3]  
my_list.append(4)  
print(my_list)  # 输出 [1, 2, 3, 4]

如果需要在列表的任意位置插入元素,可以使用列表的insert()方法。使用insert()方法将字符串’李白’插入到列表的第二个位置。需要注意的是,列表的索引是从0开始的,因此第二个位置的索引是1。

numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers]
print(squared_numbers)  # [1, 4, 9, 16, 25]

3.其他常见的优化方法:

  1. 使用列表推导式:列表推导式是一种简洁快速生成新列表的方式,相比传统的循环结构,它可以减少代码量并提高执行速度。
numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers]
print(squared_numbers)  # [1, 4, 9, 16, 25]
  1. 避免重复计算:在循环中避免重复计算可以提高性能。可以将需要重复计算的部分提取出来,使用一个变量存储结果,然后在循环中使用这个变量。

  2. 使用内置函数和模块:Python的内置函数和模块已经经过高度优化,执行速度比自己编写的函数和模块要快很多。如果需要实现某些常用的功能,可以先查看Python的内置函数和模块是否已经实现了。

  3. 减少内存分配:Python的内存分配是动态的,频繁的内存分配和释放会导致程序的执行速度变慢。可以通过预分配内存、使用内存池等方法来减少内存分配。

  4. 使用并行编程:如果循环中的任务可以并行执行,可以使用多线程或多进程的方式进行并行计算,以提高程序的执行速度。

  5. 优化循环结构:对于一些需要重复执行的循环,可以使用更高效的循环结构来提高性能。例如,使用while循环代替for循环,或者使用生成器表达式代替列表推导式。

  6. 使用缓存:如果程序中需要频繁读取某些数据,可以考虑使用缓存来提高程序的执行速度。常用的缓存方式有Redis、Memcached等。

  7. 避免全局变量:全局变量会导致程序的执行速度变慢,因为全局变量的查找和赋值需要遍历整个作用域链。可以使用局部变量或参数传递的方式来代替全局变量。

  8. 优化数据结构和算法:对于一些需要频繁进行操作的数据结构和算法,可以通过优化它们来提高性能。例如,使用哈希表来代替列表进行查找操作,或者使用快速排序算法来代替冒泡排序算法进行排序操作。

以上是一些常见的Python循环优化性能的方法,但需要注意的是,不同的优化方法适用于不同的场景和问题,需要根据具体情况进行选择和调整。

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值