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