###改进算法,选择合适的数据结构
-
使用dict的查找要比list快很多
-
当要求list的交集时,转化成set来计算比较快。set的常见操作:
union: set(list1) | set(list2)
intersection: set(list1) & set(list2)
difference: set(list1) - set(list2) -
尽量减少循环嵌套层数,把运算尽量移到上层循环之中
-
充分利用lazy-evaluation特性:比如if的判断
###字符串的优化
- 使用join而不是+进行字符串拼接
- 处理字符串时首选内置函数,不如str.isdigit(), atr.startswith()
- 对字符串进行格式化输出比直接串联更快速
###使用list comprehension和generator expression
###其他技巧
- 如果需要交换两个变量的值使用 a,b=b,a 而不是借助中间变量 t=a;a=b;b=t
- 在循环的时候使用 xrange 而不是 range;使用 xrange 可以节省大量的系统内存,因为 xrange() 在序列中每次调用只产生一个整数元素。而 range() 將直接返回完整的元素列表,用于循环时会有不必要的开销
- 使用局部变量,避免"global" 关键字。python 访问局部变量会比全局变量要快得多,因 此可以利用这一特性提升性能
- if done is not None 比语句 if done != None 更快
- 在耗时较多的循环中,可以把函数的调用改为内联的方式
- 使用级联比较 "x < y < z" 而不是 "x < y and y < z";
- while 1 要比 while True 更快(当然后者的可读性更好);
- build in 函数通常较快,add(a,b) 要优于 a+b。