让Python更高效的技巧

     记得朋友说过这样的话:  " 在我们指责机器配置不高, 程序速度慢的时候, 我们应该找找自己的程序哪里写的不高效.  因为现在的电脑硬件已经很强大, 当遇到瓶颈后, 多找找自己代码的问题, 不要总是指责机器的不是 ! "  越来越觉得这句话很实在,  而这里造成我们的代码运行速度不够快的原因有多方面, 第一个当然是算法设计本身, 这个相对好处理, 选用更加高效的算法或者更适合的数据结构, 而另一种则比较隐蔽, 需要长久的编程经验才能注意到.  本文希望对这些能提高程序速度的小技巧做一些介绍, 让我们的python代码也飞起来!  (持续更新, 欢迎讨论)


第一第二条转载自: 原文链接

一、合并字符串

假如现在有一个list,里面是一些字符串,你现在需要将它们合并成一个字符串,最简单的方法,你可以按照下面的方式去处理:

colors = ['red', 'blue', 'green', 'yellow']

result = ''
for s in colors:
    result += s

  但是,很快你会发现:这种方法非常低效,尤其当list非常大的时候。Python中的字符串对象是不可改变的,因此对任何字符串的操作如拼接,修改等都将产生一个新的字符串对象,而不是基于原字符串。所以,上面的方法会消耗很大的内存:它需要计算,存储,同时扔掉中间的计算结果。正确的方法是使用Python中的join方法:

result = ','.join(colors)

  当合并元素比较少的时候,使用join方法看不出太大的效果;但是当元素多的时候,你会发现join的效率还是非常明显的。不过,在使用的时候请注意:join只能用于元素是字符串的list,它不会进行任何的强制类型转换。连接一个存在一个或多个非字符串元素的list时将抛出异常。做了一个测试, 简单循环中, 对字符串做100W次拼接, 使用第一种方法, 耗时10s以上, 而.join方法只要1s. 已经有一个量级的差别. 


二: 字符串合并操作

  当你需要判断一个KEY是否在dict中或者要遍历dict的KEY时,最好的方法是使用关键字in:

d = {'a': 1, 'b': 2}
if 'c' in d:
    print True
# DO NOT USE
if d.has_key('c'):
    print True

for key in d:
    print key
# DO NOT USE
for key in d.keys():
    print key

  Python的dict对象是对KEY做过hash的,而keys()方法会将dict中所有的KEY作为一个list对象;所以,直接使用in的时候执行效率会比较快,代码也更简洁。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值