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

被折叠的 条评论
为什么被折叠?



