python性能调优---优化list操作

本文探讨并比较了在Python中优化代码性能的方法,特别是通过改进循环内对变量上一个digit的维护方式。通过分析原始代码、改进后的代码及其性能对比,揭示了使用list索引、手动维护每个变量的最后一个digit以及利用字符串连接方法对性能的影响。最终,文章总结了在特定场景下提高代码效率的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

digits2 = digits[0]
for d in digits[1:]:
    if digits2[-1] != d:
        digits2 += d

 性能

C:\samples\soundex\stage2>python soundex2c.py
Woo W000 12.6070768771
Pilgrim P426 14.4033353401
Flingjingwaller F452 19.7774882003

 问自己几个问题:每次循环都用digits[-1],高效吗?

用list索引高效吗?怎样更高效的维护每个变量的上一个digit?

 

优化代码2:

digits2 = ''
last_digit = ''
for d in digits:
    if d != last_digit:
        digits2 += d
        last_digit = d

 性能

 

C:\samples\soundex\stage3>python soundex3a.py
Woo W000 11.5346048171
Pilgrim P426 13.3950636184
Flingjingwaller F452 18.6108927252

 下面纯属翻译,有点不明白

 

为什么上述代码没有更快。(不是快了挺多的吗。)在Python中,用list的索引(index)相当的快。重复读取digit2[-1]

完全没有问题。另一方面:手动维护每个变量的最后一个digit意味着对于我们存储的每个digit都有两次赋值操作(原文:

means we have two variable assignments for each digit we're storing) (two variable assignments 可能是其他什么意思吧),清除了我们可能在去除list查询中获得的小小优化。(which wipes
out any small gains we might have gotten from eliminating the list lookup)

 

优化代码3

digits2 = "".join([digits[i] for i in range(len(digits))
if i == 0 or digits[i-1] != digits[i]])

 性能

C:\samples\soundex\stage3>python soundex3b.py
Woo W000 14.2245271396
Pilgrim P426 17.8337165757
Flingjingwaller F452 25.9954005327

 性能没有提升。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值