Python的collections库之deque()
我在上一篇文章BFS里使用了Python的collections.deque(),今天我来具体介绍一下这个队列,以及为什么使用它更好。
首先,collections模块提供了Python标准内建容器 dict、list、set、tuple 的替代选择。此模块相较于传统Python的容器,都有一定优点。今天我先来介绍其中的队列----deque。
collections.deque()队列支持线程安全,对于从两端添加(append)或者弹出(pop),复杂度O(1)。这也是我们为什么在BFS的时候使用它。
1.collections.deque()的创建
它的创建很简单:
import collections
a = collections.deque()
当然,它还给你提供了创建时限制队列长度的选项 maxlen :
import collections
b = collections.deque(maxlen=2) # 限制队列长度为2
当插入新数据时,队列容量已满,此时有两种情况:若选择左边插入,弹出最右边的元素;若选择右边插入,弹出最左边的元素。
2.append和appendleft
这两个都为deque的插入函数,其中,append和传统队列一样,从右边插入新数据;而appendleft则是从左边插入。
import collections
a = collections.deque()
a.append(4)
a.appendleft(1)
3.extend和extendleft
这两个函数与之前的append和appendleft类似,不过这个是插入一整个iterable (迭代对象) 。
import collections
b = collections.deque()
b.extend([1, 2, 3]) # 右边插入
b.extend('HI') # 也可以插入字符串
b.extendleft('hi') # 左边插入
4.pop和popleft
这两个函数为弹出函数,分别用于弹出队列的最右边和最左边的元素。
import collections
a = collections.deque()
a.pop() # 最右边元素
a.popleft() # 最左边元素
至于队列collections.deque()其它函数:remove(),copy(),reverse(),count(),insert(),index()。这些函数的用法与Python一般队列的用法一致,在此不再讲述。