Python数据类型的性能
列表list和字典dict
List最常用的:按索引取值和赋值
取值:v=a[i] 赋值a[i]=v 时间复杂度都是O(1)
另一个是列表增长
list.append(v) 或者lst = lst+ [v]
结果是
list range最快 同时列表推导式也用的很多
list 基本操作的大O数量级
list.pop 从列表中移除元素
pop() 从列表末尾移除元素,O(1)
pop(i)从列表中部移除元素,O(n)
pop()的时间不随list大小变化,pop(0)的时间随着list变大而变长
dict数据类型
字典与列表不同 根据关键码(key)找到数据项 而列表是根据位置(index)
最常用的取值get和赋值set,其性能为O(1)
线性结构
Linear Structure
线性结构是一种有序的数据项的集合,其中每个数据项都有前驱和后继
代码
def test1():
l = []
for i in range(1000):
l = l + [i]
def test2():
l = []
for i in range(10000):
l.append(i)
def test3():
l = [i for i in range(10000)]
def test4():
l = list(range(10000))
from timeit import Timer
import timeit
t1 = Timer('test1()', 'from __main__ import test1')
t2 = Timer('test2()', 'from __main__ import test2')
t3 = Timer('test3()', 'from __main__ import test3')
t4 = Timer('test4()', 'from __main__ import test4')
print('concat %f seconds\n' % t1.timeit(number= 1000))
print('concat %f seconds\n' % t2.timeit(number= 10000))
print('concat %f seconds\n' % t3.timeit(number= 10000))
print('concat %f seconds\n' % t4.timeit(number= 10000))
popzero = timeit.Timer('x.pop(0)', 'from __main__ import x')
popend = timeit.Timer('x.pop()', 'from __main__ import x')
x = list(range(20000000))
print(popzero.timeit(number=1000))
print(popend.timeit(number=1000))
print('pop(0) pop()')
for i in range(1000000, 100000001, 1000000):
x = list(range(i))
pt = popend.timeit(number=10)
x = list(range(i))
pz = popzero.timeit(number=10)
print('%15.5f, %15.5f' %(pz, pt))