collections模块

在内置数据类型(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对于列表的效率是没有影响
原文地址:https://www.cnblogs.com/chenyibai/p/9451917.html