語法:安全
class collections.deque([iterable[, maxlen]])app
返回從左到右初始化的新deque對象(使用append())和來自iterable(可迭代的)的數據。 若是未指定iterable(迭代),則新的deque爲空。ide
Deques是堆棧和隊列的歸納(名稱發音爲「deck」,是「雙端隊列」的縮寫)。 性能
Deques支持線程安全,高效的內存追加和從"雙端隊列"的彈出,而且在任一方向都具備大體相同的O(1) [注:時間複雜度]性能。測試
儘管列表對象支持相似的操做,可是它們針對快速固定長度操做進行了優化,而且會致使pop(0)和insert(0, v)操做的O(n)內存移動成本,這些操做改變底層數據表示的大小和位置。優化
若是未指定maxlen或爲None,則deques可能會增加到任意長度。 不然,deque被限制爲指定的最大長度。一旦有限長度的deque已滿,當添加新項目時,相應數量的項目將從相反的一端被丟棄。 有界長度deques提供相似於Unix中尾部過濾器的功能。 它們也可用於跟蹤僅涉及最近活動的事物和其餘數據池。spa
Deque對象支持如下方法:線程
append(x) 將x添加到雙端隊列的右側。對象
appendleft(x) 將x添加到雙端隊列的左側。blog
clear() 刪除deque中的全部元素,使其長度爲0。
copy() 建立一個deque的淺表副本。3.5版本中的新功能。
count(x) 計算deque元素的數量等於x。3.2版本中的新功能
extend(iterable) 經過追加iterable參數中的元素來擴展雙端隊列的右側。
extendleft(iterable) 經過追加iterable中的元素來擴展雙端隊列的左側。請注意,一系列左邊追加結果會顛倒迭代參數中元素的順序。
index(x[, start[, stop]]) 返回deque中的x的位置(在索引開始處或索引中止以前)。若是未找到,則返回第一個匹配或引起ValueError。
insert(i, x) 將x插入位置i處的deque中。3.5版本中的新功能。若是插入會致使有界的deque超出maxlen,則會引起IndexError。
pop() 從deque的右側移除並返回一個元素。 若是沒有元素存在,則引起IndexError。
popleft() 從deque的左側移除並返回一個元素。 若是沒有元素存在,則引起IndexError
remove(value) 刪除第一次出現的值。 若是找不到,則會引起ValueError。
reverse() 反序排列deque的元素,而後返回None。New in version 3.2.
rotate(n=1) 向右旋轉deque n個步。 若是n爲負數,則向左旋轉。
解釋:
當deque不爲空時:
向右旋轉一個等同於 d.appendleft(d.pop())
向左旋轉一個等同於 d.append(d.popleft())
另,Deque對象還提供一個只讀屬性:
maxlen
最大的deque的大小,若是×××限,則爲None. [3.1版本引入]
除上述以外,deques支持迭代、pickling、len(d)、reverse(d)、copy.copy(d)、copy.deepcopy(d),使用 in 運算符進行成員資格測試,以及下標引用,例如:d[-1]。
索引訪問在兩端都是O(1),但在中間減慢到O(n)。
對於快速隨機訪問,請改用列表。
從版本3.5開始,deques開始支持__add__(), __mul__(), __imul__()。
下面是例子:
deque Recipes(食譜???黑人問號臉)
本節介紹處理deques的各類方法。
有界長度的deques提供了相似於Unix中尾部過濾器的功能:
#返回文件的最後n行
另外一種使用deques的方法是經過向右追加並彈出到左邊來維護一系列新添加的元素:
rotate()方法提供了一種實現雙端切片和刪除的方法。
例如,del d[n]的純Python實現依賴於rotate()方法來定位要彈出的元素:
爲了實現deque切片,使用相似的方法來應用rotate( )來將目標元素置於雙端隊列的左側。
使用popleft( )刪除舊條目,使用extend( )添加新條目,而後反轉旋轉。
經過該方法的細微變化,很容易實現Forth樣式的堆棧操做,如dup,drop,swap,over,pick,rot和roll。