首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python性能调优-优化list操作

2012-10-11 
python性能调优---优化list操作代码:digits2 digits[0]for d in digits[1:]:if digits2[-1] ! d:digits

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

?性能没有提升。

?

?

?

?

热点排行