python性能调优---优化list操作
代码:
digits2 = digits[0]for d in digits[1:]: if digits2[-1] != d: digits2 += d
?性能
C:\samples\soundex\stage2>python soundex2c.pyWoo W000 12.6070768771Pilgrim P426 14.4033353401Flingjingwaller 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.pyWoo W000 11.5346048171Pilgrim P426 13.3950636184Flingjingwaller 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.pyWoo W000 14.2245271396Pilgrim P426 17.8337165757Flingjingwaller F452 25.9954005327
?性能没有提升。
?
?
?
?