循环的优化
有多重循环的尽量将内层的计算提到上一层。
使用 xrange 比 range 节省大量的系统内存。
可以不用循环的时候就不要用循环,比如 改用map()
字符串的优化
字符串数量小的时候,"+"和格式化都很快,join是最慢的,字符串数量大的时候,join比较快。
所以:
简单字符串连接时,直接使用"+"
有格式化需求时,使用"%"
当有大量字符串时,使用"str.join"
列表的优化
成员的查找访问等操作,字典比列表快,查找字典的时间复杂度为O(1),查找列表为O(n)。
涉及到求 list 交集、并集或者差的问题,转换为 set 来操作比较快。
使用列表解析(list comprehension)和生成器表达式(generator expression)列表解析要比在循环中重新构建一个新的 list 更为高效。
其他技巧:
如果需要交换两个变量的值使用 a,b=b,a ,而不是借助中间变量 t=a;a=b;b=t
使用级联比较 "x < y < z" 而不是 "x < y and y < z";
if done is not None 比语句 if done != None 快
if is True 比 if == True 快
while 1 要比 while True 更快
如果存在条件表达式 if x and y,在 x 为 false 的情况下 y 表达式的值将不再计算。
所以对于and,应该把满足条件少的放在前面,而对于or,把满足条件多的放在前面。
20171230