python数据类型的性能
中国大学链接
学习python两种内置数据类型上各种操作的大O数量级
- 列表list和字典dict
- 通过运行估计各种操作运行时间数量级
对比list和dict的操作
类型 | List | Dict |
---|
索引 | 自然数i | 不可变类型值key |
添加 | append、extend、insert | b[k]=v |
删除 | pop、remove* | pop |
更新 | a[i]=v | b[k]=v |
正查 | a[i]、a[i:j] | b[k]、 copy |
反查 | index(v)、count(v) | 无 |
其他 | reverse、sort | has_key、update |
List列表数据类型常用操作性能
- 最常用:按索引取值和赋值(v = a[i], a[i] = v)
·由于列表随机访问特性,操作执行时间与列表大小无关,均为O(1) - 列表增长,可选择append()和_add_() “+”
· lst.append(v),执行时间是O(1)
` lst = lst+ [v], 执行时间是O(n+k),其中k是被加的列表的长度
4种生成前n个整数列表的方法
def test1():
l = []
for i in range(1000):
l = l + [i]
def test2():
l = []
for i in range(1000):
l.append(i)
def test3():
l = [i for i in range(1000)]
def test4():
l = list(range(1000))
使用timeit模块对函数计时
from timeit import Timer
t1 = Timer("test1()", "from __main__ import test1")
print("concat %f seconds\n" % t1.timeit(number= 1000)
方法计时
List基本操作的大O数量级
操作 | 大O数量级 |
---|
index() | O(1) |
index.assigment | O(1) |
append | O(1) |
pop() | O(1) |
pop(l) | O(n) |
那些仰望星空的人,自身也在发光