# deque對象 ''' class collections.deque([ iterable [,maxlen ] ] ) 返回一個從左到右(使用append())初始化的新deque對象,其中包含來自iterable的數據。如果未指定iterable,則新的deque為空。 Deques是堆棧和隊列的概括(名稱發音為“deck”,是“雙端隊列”的縮寫)。Deques支持線程安全,內存有效的附加和從雙端隊列的彈出,在任一方向上具有大致相同的O(1)性能。 盡管list對象支持類似的操作,但它們針對快速固定長度操作進行了優化,並且導致O(n)內存移動成本pop(0)和操作,這些成本 改變了底層數據表示的大小和位置。insert(0, v) 如果未指定maxlenNone,則deques可能會增長到任意長度。否則,雙端隊列限制為指定的最大長度。一旦有界長度雙端隊列已滿,當添加新項目時,從對方端丟棄相應數量的項目。有界長度deques提供類似於tailUnix中的過濾器的功能。它們還可用於跟蹤僅涉及最近活動的事務和其他數據池。 Deque對象支持以下方法: append(x ) 將x添加到雙端隊列的右側。 appendleft(x ) 將x添加到雙端隊列的左側。 clear() 刪除deque中的所有元素,使其長度為0。 copy() 創建雙端隊列的淺表副本。 版本3.5中的新功能。 count(x ) 計算deque元素的數量等於x。 版本3.2中的新功能。 extend(可迭代的) 通過附加可迭代參數中的元素來擴展雙端隊列的右側。 extendleft(可迭代的) 通過附加來自iterable的元素來擴展雙端隊列的左側。注意,左邊追加的系列會導致反轉迭代參數中元素的順序。 index(x [,start [,stop ] ] ) 返回deque 中x的位置(在索引開始時或 索引停止之前)。返回第一個匹配或ValueError如果未找到則引發 。 版本3.5中的新功能。 insert(i,x ) 將x插入位置i的雙端隊列中。 如果插入會導致有界雙端超過maxlen,IndexError則會引發a。 版本3.5中的新功能。 pop() 從雙端隊列的右側移除並返回一個元素。如果沒有元素,則提出一個IndexError。 popleft() 從雙端隊列的左側移除並返回一個元素。如果沒有元素,則提出一個IndexError。 remove(值) 刪除第一次出現的值。如果沒有找到,提出一個 ValueError。 reverse() 在原位反轉deque的元素然后返回None。 版本3.2中的新功能。 rotate(n = 1 ) 向右旋轉deque n步。如果n為負數,則向左旋轉。 當雙端隊列不為空時,向右d.appendleft(d.pop())旋轉一步相當於,向左旋轉一步相當於d.append(d.popleft())。 Deque對象還提供一個只讀屬性: maxlen 一個雙端隊列的最大大小或None無邊界。 ''' from collections import deque var = deque(['shanghai','beijing','shenzhen','guangzhou']) # 隊列遵從先進先出的原則,在設定maxlen 的情況下,后進去的會將先進去的擠出去 de = deque(maxlen=4) print(de.maxlen) #4 de.append("Tom") de.append("Sarah") de.append("Tony") de.append("Jim") de.append("Charles") print(de)