python的deque(双向)队列详解
首先 python的队列有很多种
Python标准库中包含了四种队列,分别是queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque
可见deque是标准库collections中的
这其中最好用的是deque
以下是deque的基本操作:
它的操作很像list 同时
1 q = collections.deque([1, 2, 3, 4])
2 print(5 in q) # False
3 print(1 in q) # True
还可以顺逆时针旋转...
# 顺时针
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]
还可以复制一个新队列:
>>> d.append(1)
>>> d.append(2)
>>> d
deque([1, 2])
>>> d1 = d.copy()
>>> d1
deque([1, 2])
值得注意的是 deque里边的形式是列表形式
所以 试试extend呢?
>>> d.clear()
>>> d.append(1)
>>> d.extend([3,4,5])
>>> d
deque([1, 3, 4, 5])
能不能从左边extend呢:
>>> 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)
我们用deque就好
代码:
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(双向)队列详解的更多相关文章
- python中的Queue(队列)详解
一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO: Queue.Que ...
- Python Deque 模块使用详解,python中yield的用法详解
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...
- Python中的高级数据结构详解
这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...
- 数据结构图文解析之:队列详解与C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- Python安装、配置图文详解(转载)
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...
- 【和我一起学python吧】Python安装、配置图文详解
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...
- STL之deque双向队列
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...
- collection系列用法-deque双向队列
deque双向队列 Deque可以从两端添加和删除元素.常用的结构,是它的简化版本. Deque支持序列的常用操作,现在举一个简单例子,你会发现其实跟平成的list没啥区别: import colle ...
- deque双向队列(转)
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque的实现比较复杂,内部会维 ...
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
随机推荐
- 【知识分享】Navicat Premium for Mac的破解教程
转自Navicat Premium for Mac v12.0.22.0 破解教程,macOS上手动破解,无需补丁,无毒下载了Navicat,没有注册码,突然发现了这篇破解教程,竟爱不释手,顾Copy ...
- CCNP:重发布及实验
重发布(又:重分布.重分发):一台设备同时运行于两个协议或两个进程,默认从两端学习到的路由条目不共享:重发布技术就是人为的进行共享. 一 满足: 1.必须存在ASBR --- 自治系统边界路由器-- ...
- VueX中state变化捕捉不到_getters监测不到state的变化
原因 可能有多种原因, 现在我说一下我碰到的一种情况: state种有一个变量叫state,它是一个json对象, 可把我害惨了.因为他这个json长这个样: messageBox:{ friendI ...
- springmvc 源码分析(一)-- DisparcherServlet的创建和注册到tomcat
一. servlet 3.0 的使用 1.1 环境搭建: servlet跟spring没有任何关系,我创建一个servlet可以不依赖spring,现在搭建一个纯的servlet项目,并实现简单的类似 ...
- 使用VS2015从TFS获取项目后编译报错
把VS2015关闭后,打开C:\Windows\Temp,把里面的文件清空后,重新打开VS即可.
- macOS使用ABP.vNext Core开发CMS系统(一) 让程序跑起来
macOS使用ABP.vNext Core开发CMS系统(一) 让程序跑起来--2020年10月5日 国庆假期,陪老婆的同时也不能忘记给自己充充电,这不想搞个CMS系统,考虑自己的时间并不多,所以想找 ...
- Layman PHP+JavaScript 实现图片无刷新上传
html文件代码 <!-- ajax文件上传开始 --> <script type="text/javascript" src="/imageuploa ...
- nessus 家庭版安装教程(windows)
1.根据系统选择安装包:https://www.tenable.com/products/nessus/select-your-operating-system 2.申请激活码,在我们安装的时候差不多 ...
- uni-app引入iconfont字体图标
1 首先进入你的iconfont项目 很好, 看见圈圈的吗 , 我说蓝色的,记住了,选到这个 ,然后点击下载本地项目, 解压完就是这个了 ,然后把 圈起来的放到你的项目文件里面 ,记得引入的时候路径别 ...
- Varnish 6.2.2 的介绍与安装
一.简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 Squid 相比,Varnish 具有性能更高.速度更快 ...