collections.deque

返回从左到右初始化的新 deque 对象(使用 append())和来自 iterable 的数据。如果未指定 iterable,则新 deque 为空。

Deques 是堆栈和队列的概括(名称发音为 deck,是双端队列的缩写)。Deques 支持线程安全,内存有效的附加和从 deque 两侧弹出,在任一方向上具有大致相同的 O(1) 性能。

尽管列表对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并导致 pop(0) 和 insert(0, v)操作的 O(n) 内存移动成本,这些操作改变了底层数据表示的大小和位置。

版本 2.4 中的新功能。

如果未指定 maxlen 或者是 None,则 deques 可能会增长到任意长度。否则,deque 被限制到指定的最大长度。一旦有限长度 deque 已满,当添加新项目时,从相对端丢弃相应数量的项目。有界长度 deques 提供类似于 Unix 中的尾部过滤器的功能。它们还可用于跟踪仅涉及最近活动的事务和其他数据池。

在 2.6 版中更改:添加了 maxlen 参数。

>>> from collections import deque
>>> d = deque('ghi')                 # make a new deque with three items
>>> for elem in d:                   # iterate over the deque's elements
...     print elem.upper()
G
H
I

>>> d.append('j')                    # add a new entry to the right side
>>> d.appendleft('f')                # add a new entry to the left side
>>> d                                # show the representation of the deque
deque(['f', 'g', 'h', 'i', 'j'])

>>> d.pop()                          # return and remove the rightmost item
'j'
>>> d.popleft()                      # return and remove the leftmost item
'f'
>>> list(d)                          # list the contents of the deque
['g', 'h', 'i']
>>> d[0]                             # peek at leftmost item
'g'
>>> d[-1]                            # peek at rightmost item
'i'

>>> list(reversed(d))                # list the contents of a deque in reverse
['i', 'h', 'g']
>>> 'h' in d                         # search the deque
True
>>> d.extend('jkl')                  # add multiple elements at once
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> d.rotate(1)                      # right rotation
>>> d
deque(['l', 'g', 'h', 'i', 'j', 'k'])
>>> d.rotate(-1)                     # left rotation
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])

>>> deque(reversed(d))               # make a new deque in reverse order
deque(['l', 'k', 'j', 'i', 'h', 'g'])
>>> d.clear()                        # empty the deque
>>> d.pop()                          # cannot pop from an empty deque
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in -toplevel-
    d.pop()
IndexError: pop from an empty deque

>>> d.extendleft('abc')              # extendleft() reverses the input order
>>> d
deque(['c', 'b', 'a'])

资料来源: https//docs.python.org/2/library/collections.html