结论:
操作队尾元素时,速度差可忽略不计;
操作队头元素时,Deque远快于List
from collections import deque
from time import time
def test(num, struct, fun):
sta = time()
for _ in range(num):
fun(struct)
end = time()
print("time cost: ", end - sta)
1 队尾插入元素---速度对比
num = int(1e7)
struct = list()
fun = lambda struct: struct.append(1)
test(num, struct, fun)
time cost: 0.7700014114379883
num = int(1e7)
struct = deque()
fun = lambda struct: struct.append(1)
test(num, struct, fun)
time cost: 0.6693985462188721
2 队尾弹出元素---速度对比
num = int(1e7)
struct = list(i for i in range(num))
fun = lambda struct: struct.pop()
test(num, struct, fun)
time cost: 0.8014125823974609
num = int(1e7)
struct = deque(i for i in range(num))
fun = lambda struct: struct.pop()
test(num, struct, fun)
time cost: 0.6997454166412354
3 队头插入元素---速度对比
num = int(1e5)
struct = list()
fun = lambda struct: struct.insert(0, 1)
test(num, struct, fun)
time cost: 1.4022290706634521
num = int(1e5)
struct = deque()
fun = lambda struct: struct.appendleft(1)
test(num, struct, fun)
time cost: 0.012262105941772461
num = int(1e5)
struct = deque()
fun = lambda struct: struct.insert(0, 1)
test(num, struct, fun)
time cost: 0.00999760627746582
4 队头弹出元素---速度对比
num = int(1e5)
struct = list(i for i in range(num))
fun = lambda struct: struct.pop(0)
test(num, struct, fun)
time cost: 9.153056383132935
num = int(1e5)
struct = deque(i for i in range(num))
fun = lambda struct: struct.popleft()
test(num, struct, fun)
time cost: 0.007311344146728516