Python3-笔记-B-006-数据结构-双向队列deque

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'])
posted @ 2017-10-25 17:15  魏桐  阅读(151)  评论(0编辑  收藏  举报