1. 程式人生 > >Python3-筆記-B-006-數據結構-雙向隊列deque

Python3-筆記-B-006-數據結構-雙向隊列deque

append 復雜度 元素 結構 insert 刪除 lis def 安全

from collections import deque
# 雙向隊列[有序序列] (封裝list)
def deques():
# 雙向隊列,線程安全,隊列兩端添加和彈出復雜度為O(1),效率很高
# 創建
lists = ["A", "B", "C", "D", "E"] # <class ‘list‘>: [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘]
queue = deque(lists) # deque([‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘])
queue = deque(lists, 3) # 3為限制容器大小,隊列滿之後,先添加的元素將擠出另一端的舊元素;
# 未指定容器大小將是任意長度, deque([‘C‘, ‘D‘, ‘E‘], maxlen=3)
queue = deque(range(10)) # deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 添加
queue.append("F") # 添加到右邊, deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘])
queue.appendleft("G") # 添加到左邊, deque([‘G‘, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘])
queue.extend(range(3)) # 右邊添加iterable元素, deque([‘G‘, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘, 0, 1, 2])
queue.extendleft(range(3)) # 追加到左邊,註意變成了210deque([2, 1, 0, ‘G‘, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘, 0, 1, 2])
queue.insert(1, "L") # 在指定的index插入元素,deque([2, ‘L‘, 1, 0, ‘G‘, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘, 0, 1, 2])
queue = queue + deque(range(3)) # 合並, deque([2, ‘L‘, 1, 0, ‘G‘, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘F‘, 0, 1, 2, 0, 1, 2])
queue = queue * 3 # n

# 獲取
queue = deque(lists) # deque([‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘])
queue2 = queue.copy() # 淺拷貝
index = queue.index("C") # 獲取索引,未找到拋ValueError異常, 2
index = queue.index("C", 1) # 可以指定start
index = queue.index("C", 2, 4) # 可以指定end
elem = max(queue) # e
elem = min(queue) #

# 統計
count = queue.count("A") # 1

# 刪除
elem = queue.pop() # 彈出右邊元素, deque([‘A‘, ‘B‘, ‘C‘, ‘D‘])
elem = queue.popleft() # 彈出左邊元素, deque([‘B‘, ‘C‘, ‘D‘])
queue.remove("C") # deque([‘B‘, ‘D‘])
queue.clear() # 清空


# 指針
queue = deque(lists) # deque([‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘])
queue.rotate(-1) # 旋轉指針 +元素後移 -元素前移, deque([‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘A‘])

# 其他
queue.reverse() # 反轉元素, deque([‘A‘, ‘E‘, ‘D‘, ‘C‘, ‘B‘])

Python3-筆記-B-006-數據結構-雙向隊列deque