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

代码:

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

 性能没有提升。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值