在python的collections模块中有一个deque的数据结构,它与list类似,具有append()和pop()方法,除此以外,还添加了leftappend()和leftpop()的方法,其运行模型与队列和栈类似,它的好处在与面对大数据量的时候,插入和取出的速度要更快,为了比较直观的感受这种差别,我写了一个简单的装饰器来检查它们在这两方面的差别,装饰器如下
def time_counter(func):
def wrapper(*args,**kwargs):
start=time.time()
func(*args,**kwargs)
end = time.time()
print('{method} 程序运行时间:{}'.format(end-start,**kwargs))
return wrapper
接下来让我们做如下的测试
@time_counter
def deque_func(method):
if method == 'append':
q = collections.deque()
for i in range(1000000):
q.append(i)
elif method == 'pop':
q = collections.deque()
for i in range(1000):
q.append(i)
for i in range(10):
q.pop()
else:
print('only append and pop is accepted')
@time_counter
def list_func(method):
if method == 'append':
l = []
for i in range(1000000):
l.append(i)
elif method == 'pop':
l = []
for i in range(1000):
l.append(i)
for i in range(10):
l.pop()
else:
print('only append and pop is accepted')
deque_func(method='append')
list_func(method='append')
deque_func(method='pop')
list_func(method='pop')
最终的结果如下:
append 程序运行时间:0.06981182098388672
append 程序运行时间:0.09574413299560547
pop 程序运行时间:0.000997304916381836
pop 程序运行时间:0.0009980201721191406
重复几次,都差不多是这样,次数太少感觉感受不到性能的明显优越性,但是太多,我设置十亿次的时候个人电脑会卡住不动...