运算的性能分析有一个高深的词汇——算法分析,主要研究的是运行时间和空间的需求。对计算时间的描述一般通过增长量级,增长量级是一套函数,其渐进增长行为是等价的,用大O来表示。
O(1) < O(logb n) < O(n) < O(n logb n) < O(n)< O(n2)
对数算法中的基数并不重要,指数算法只适用于小数据问题。
Python中算数运算的时间是常量,但超大整数的运算增加是线性的。索引操作也是常量时间,无论数据结构如何都是如此。只要循环体中的所有操作都是线性时间,则遍历列表或者字典的for循环是线性时间。如果使用同样的循环添加字符串列表,那么运行时间就是二次方的,所以通常采用join做字符串拼接。
大多数字符串和元组操作都是线性的,除了索引和len,都是常量时间,min和max是线性的,slice操作的时间与输出的长度成正比,与输出的大小无关。
大多数列表方法是线性的,一般而言,尾部添加和删除元素是常量时间,排序是O(n logb n)。in操作符是线性搜索,字符串的count和find也是如此。
大多数字典操作和方法是常量时间,但copy和update的运行时间是线性的,keys,values与items是线性的,iterkeys,itervalues与iteritems是常量时间,但如果遍历迭代器,循环也是线性的。
还记得有这样一句名言,“如果只有一种数据结构的化,就用hash表吧!”