在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
什么是队列 先进先出 import queue q = queue.Queue() print(q.qsize()) q.put(1) q.put('a') q.put((1,2,3)) q.put(({'k':'v'})) print(q.qsize()) print('q : ',q) print('get : ',q.get()) print(q.qsize()) 结果: 0 4 q : <queue.Queue object at 0x0000018C76DB5F60> get : 1 3 deque 双端队列 from collections import deque dq = deque() dq.append(2) dq.append(5) dq.appendleft('a') dq.appendleft('b') print(dq) 结果: deque(['b', 'a', 2, 5]) from collections import deque dq = deque() dq.append(2) dq.append(5) dq.appendleft('a') dq.appendleft('b') print(dq) 结果: deque(['b', 'a', 2, 5]) print(dq.pop()) 结果:5 print(dq) 结果:deque(['b', 'a', 2]) print(dq.popleft()) 结果:b print(dq) 结果:deque(['a', 2,5]) print(dq.remove('a')) print(dq) 结果:deque(['b', 2, 5]) print(dq.insert(2,'123')) print(dq) 结果:deque(['b', 'a', '123', 2, 5])
# 总结
# 在insert remove的时候 deque的平均效率要高于列表
# 列表根据索引查看某个值的效率要高于deque
# append 和pop对于列表的效率是没有影响