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
3 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)
>>> d
deque([1, 2])
>>> d1 = d.copy()
>>> d1
deque([1, 2])

extend

>>> d.clear()
>>> d.append(1)
>>> d.extend([3,4,5])
>>> d
deque([1, 3, 4, 5])

extendleft

python
>>> d.clear()
>>> d.append(1)
>>> d.extendleft([3,4,5])
>>> d
deque([5, 4, 3, 1])

index

>>> d.extend(["a","b","c","d","e","f"])
>>> d
deque(['a', 'b', 'c', 'd', 'e','f'])
>>> d.index("c",0,4) #指定查找的区间
2
>>> 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 -1def 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(双向)队列相关推荐

  1. STL系列之一 deque双向队列

    原文地址:http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删 ...

  2. C++ Deque(双向队列

    C++ Deque(双向队列) C++ Deque(双向队列) 是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连 ...

  3. 【转载】deque双向队列

    继vector和queue之后,又发现一个很好用的东西. 本篇转载自http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列 ...

  4. python队列来做什么_简单介绍python的双向队列

    介绍 大家都知道利用 .append 和 .pop 方法,我们可以把列表当作栈或者队列来用(比如,把 append 和 pop(0) 合起来用,就能模拟栈的"先进先出"的特点).但 ...

  5. deque双向队列的使用

    Deque的使用 /*** Retrieves and removes the first element of this deque,* or returns {@code null} if thi ...

  6. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  7. Python容器专题 - deque(队列)--双向队列对象

    deque(队列)–双向队列对象 Deque队列是由栈或者queue队列生成的.列表也可以用作队列,其中先添加的元素被最先取出 ("先进先出"):普通列表的一个巨大缺陷在于,其往开 ...

  8. Python培训教程:Python内置数据结构之双向队列

    经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...

  9. Python内置数据结构之双向队列

    经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...

最新文章

  1. php protected 属性,PHP 如何获取protected属性?
  2. 拉曼软件在win8上运行出错问题
  3. 5/7 SELECT语句:过滤(LIKE使用通配符)
  4. python+selenium_浏览器引擎
  5. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)
  6. ABP VNext实践之搭建可用于生产的IdentityServer4
  7. tomcat日志输出控制
  8. 设计模式1-简单工厂模式
  9. POJ3076 Sudoku
  10. 还不会财务管理分析?Python爬取全网财务分析数据
  11. RGB和RGBA之间的转换
  12. Lrc歌词批量下载助手 MP3歌词批量下载助手
  13. JS自定义鼠标右键菜单
  14. 计算机制作贺卡教案,教案与学生成果:制作电子贺卡
  15. Kali Linux 2022新版发布
  16. 2022最新自动化测试面试题及答案
  17. 西门子S7-1200控制V90伺服
  18. java 圆类 圆锥类_喉室位于_java程序设计答案_学小易找答案
  19. android守护进程详解
  20. 前端js数组元素的筛选,修改,新增属性小技巧一---前端数据筛选filter()函数,更新数组map()函数;

热门文章

  1. 从零开始,搭建一个简单的UVM验证平台(一)
  2. SAP-MM-发票行项目格式
  3. EDIUS音频滤镜之低通滤波与高通滤波
  4. Oracle OEM 13C
  5. Python3快速入门(一)——Python简介
  6. 将文字复制到剪粘板 Zero Clipboard 简单使用
  7. MATLAB 爱心代码
  8. 我国教育大数据想要快速发展,需要注意哪些问题?
  9. 关于excel打开缓慢,即使只是新建
  10. 自从来了个印度大老板