python中的deque双向队列详解
作者:Yake1965
这篇文章主要介绍了python中的deque双向队列详解,相比 list 实现的队列,deque 拥有更低的时间和空间复杂度,list 实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),需要的朋友可以参考下
python deque(双向)队列
Python 标准库中包含了四种队列,分别是 queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque
相比 list 实现的队列,deque 拥有更低的时间和空间复杂度。list 实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),deque 在出队(pop)和入队(append)时的时间复杂度是O(1)。 所以 deque 更有优越性,而且 deque 既可以表示队列又可以表示栈。
in 操作符
q = collections.deque([1, 2, 3, 4]) print(5 in q) # False print(1 in q) # True
rotate 旋转
# 顺时针 q = collections.deque([1, 2, 3, 4]) q.rotate(1) print(q) # [4, 1, 2, 3] q.rotate(1) print(q) # [3, 4, 1, 2] # 逆时针 q = collections.deque([1, 2, 3, 4]) q.rotate(-1) print(q) # [2, 3, 4, 1] q.rotate(-1) print(q) # [3, 4, 1, 2]
copy
d.append(1) d.append(2) deque([1, 2]) d1 = d.copy() deque([1, 2])
extend
d.clear() d.append(1) d.extend([3,4,5]) deque([1, 3, 4, 5])
extendleft
d.clear() d.append(1) d.extendleft([3,4,5]) deque([5, 4, 3, 1])
index
d.extend(["a","b","c","d","e","f"]) deque(['a', 'b', 'c', 'd', 'e','f']) d.index("c",0,4) #指定查找的区间 d.index("c",0,2) error...
d.insert(位置,元素) 在指定位置插入元素 d.remove(元素) 删除指定元素 d.reverse 队列翻转
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value 需要返回 -1
输入: [“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”] [[],[1],[2],[],[],[]] 输出: [null,null,null,2,1,2]
既然时间复杂度是O(1)
from collections import deque class MaxQueue: def __init__(self): self.d = deque() def max_value(self) -> int: return max(self.d) if self.d else -1 def push_back(self, value: int) -> None: self.d.append(value) def pop_front(self) -> int: return self.d.popleft() if self.d else -1
到此这篇关于python中的deque双向队列详解的文章就介绍到这了,更多相关deque双向队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!