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'])