当前位置: 首页 > news >正文

Python数据类型:双端队列deque-比列表list性能更高的一种数据类型

Python数据类型:双端队列

说到容器类型,大家第一时间想到的多半是list,而list确实也能解决大部分的需要,但碰到列表内的数据量相当大的时候,性能问题就显得尤为重要;再或者列表被恶意注入一个无穷大的数据量时,就可能会暴露出安全问题来。较好的替代方法是:collections.deque。获得性能或安全的同时,牺牲的是数据大小。

deque队列两端取出或者删除时间复杂度都是O(1),而列表都是O(n),队列的性能比列表更好

简介

欢迎关注我的公众号:Python雁横

collections.deque对象(双端队列),支持从任意一端增加删除元素。deque是线程安全的,内存高效的队列,它被设计为从两端追加和弹出都非常快。

创建deque对象

deque() 用于创建一个deque对象

可选参数

  • iterable 一个可迭代对象,如列表,元组
  • maxlen 最大长度,超出最大长度,会将之前的元素挤出去

示例:

from collections import deque
dq = deque([1,2,3,4]],maxlen=10)

deque对象的方法

dq.append(x) 在右端添加x

>>>dq.append(5)
>>>print(dq)
deque([1, 2, 3,4,5])

dq.appendleft(x) 在左端添加x

>>>dq.appendleft(0)
>>>print(dq)
deque([0,1,2,3,4,5])

dq.pop() 在右端弹出元素,若队列无元素,会报错

>>>dq.pop()
5

dq.popleft() 在左端弹出元素,若队列无元素,会报错

>>>dq.popleft()
0

dq.extend(iterable) 和列表的extend类似,在右侧扩展队列,参数是一个可迭代对象

>>>dq.extend([5,6,7,8])

dq.extendleft(iterable) 同理

>>>dq.extendleft([5,6,7,8])

dq.remove(value) 移除第一个找到的value,若未找到,会导致IndexError

dq.remove(3)

dq.clear() 清空队列

dq.clear()

rotate(n) 如果n>0,所有元素向右移动n个,否则向左

dq.rotate(5)

如果你学到什么,记得给我点个赞哦,也可以关注我的公众号(Python雁横)获取更多有趣的教程

转载于:https://blog.51cto.com/13460911/2148175

相关文章:

  • Unity3dUGUI图片循环轮播效果
  • P1379 八数码难题
  • Android开发之漫漫长途 Ⅷ——Android Binder(也许是最容易理解的)
  • 深入理解计算机操作系统(三)
  • GrapeCity Demo示例展示:如何用Spread.Sheets来创建应用|附演示文件下载
  • Glovo完成1.15亿欧元C轮融资,成为欧洲相关技术聚合中心
  • json提取嵌套数据
  • abstract 为什么不能与private,static,final一起使用????
  • springboot2整合OAuth2.0认证实例
  • 关于Vue和React区别的一些笔记
  • [Sdoi2010]地精部落
  • samba服务
  • RabbitMQ中各种消息类型如何处理?
  • 初识 JSP---(servlet / ServletConfig接口 / ServletContext接口)
  • 根据IP查地理位置信息
  • 【技术性】Search知识
  • download使用浅析
  • JavaScript对象详解
  • Less 日常用法
  • React Transition Group -- Transition 组件
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 规范化安全开发 KOA 手脚架
  • 机器学习 vs. 深度学习
  • 2017年360最后一道编程题
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)SpringCloud 整合Python
  • (11)MATLAB PCA+SVM 人脸识别
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (转) Android中ViewStub组件使用
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .cn根服务器被攻击之后
  • .Net MVC + EF搭建学生管理系统
  • .NET/C# 使窗口永不获得焦点
  • .net和jar包windows服务部署
  • .NET企业级应用架构设计系列之开场白
  • .net专家(高海东的专栏)
  • ??在JSP中,java和JavaScript如何交互?
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [ linux ] linux 命令英文全称及解释
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C#]扩展方法
  • [C++核心编程](四):类和对象——封装
  • [CLickhouse] 学习小计
  • [FC][常见Mapper IRQ研究]
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [LeetCode]Multiply Strings
  • [Linux]使用CentOS镜像与rpm来安装虚拟机软件
  • [MFC] VS2013版本MFC工程移植到VC6.0上