Python容器专题 - deque(队列)--双向队列对象
deque(队列)–双向队列对象
Deque队列是由栈或者queue队列生成的。列表也可以用作队列,其中先添加的元素被最先取出 (“先进先出”);普通列表的一个巨大缺陷在于,其往开头(左边)插入或弹出元素时显得十分慢 ,因为所有的其他元素都必须移动一位。
Deque队列和list自带的方法类似,或者说功能上是近乎一样的,它可以向内存高效添加(append)和弹出(pop),从两端都可以。然而相比于普通列表,deque队列两个方向的大概开销都是 O(1) 复杂度。
由于collections是内建模块,无需单独安装。可以直接从collections 中导入deque:
from collections import deque
创建该对象时需要从Python自带的collections模块中进行导入deque类。它返回一个新的双向队列对象,从左到右初始化(用方法 append()) ,从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。
接下来各位可能看一眼就觉得熟悉了,它们中的很多都已经在列表的基本方法中详细讨论并举例说明过。
接下来我们通过实例来讲解Deque队列的相关方法及其用法:
– 增 –
append(x) - 添加 x 到右端。
【eg】
from collections import deque
a = deque([1,2,3,4,5,6,7])
a.append('1')
a
[Out]:
deque([1, 2, 3, 4, 5, 6, 7, '1'])
其中,不仅可以将列表、元组传入deque队列,甚至可以是字符串等等,如:
【eg】
from collections import deque
a = deque('abcde')
a.append('1')
a
[Out]:
deque(['a', 'b', 'c', 'd', 'e', '1'])
appendleft(x) - 添加 x 到左端。
【eg】
from collections import deque
a = deque('abcde')
a.appendleft('A')
a
[Out]:
deque(['A', 'a', 'b', 'c', 'd', 'e'])
extend(iterable) - 扩展deque的右侧,通过添加iterable参数中的元素。
【eg】
from collections import deque
a = deque('abcde')
a.extend('ABC')
a
[Out]:
deque(['a', 'b', 'c', 'd', 'e', 'A', 'B', 'C'])
【eg】
from collections import deque
a = deque('abcde')
a.extend(['*',6,'&',9,'^'])
a
[Out]:
deque(['a', 'b', 'c', 'd', 'e', '*', 6, '&', 9, '^'])
extendleft(iterable) - 扩展deque的左侧,通过添加iterable参数中的元素。
- 左添加时,在结果中iterable参数中的顺序将被反过来添加。
【eg】
from collections import deque
a = deque('abcde')
a.extendleft(['*',6,'&',9,'^'])
a
[Out]:
deque([’^’, 9, ‘&’, 6, ‘*’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’])
insert(i, x) - 在位置 i 插入 x 。
- 如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError。
【eg】
from collections import deque
a = deque('abcde')
a.insert(2,'666')
a
[Out]:
deque(['a', 'b', '666', 'c', 'd', 'e'])
– 删 –
pop() - 移去并且返回一个元素,deque 最右侧的那一个。
- 如果没有元素的话,就引发一个 IndexError。
【eg】
from collections import deque
a = deque('abcde')
a.pop()
a
[Out]:
deque([‘a’, ‘b’, ‘c’, ‘d’])
popleft() - 移去并且返回一个元素,deque 最左侧的那一个。
- 如果没有元素的话,就引发 IndexError。
【eg】
from collections import deque
a = deque('abcde')
a.popleft()
a
[Out]:
deque([‘b’, ‘c’, ‘d’, ‘e’])
remove(value) - 移除找到的第一个 value。
- 如果没有的话就引发 ValueError。
【eg】
from collections import deque
a = deque('albc3d9wea9e')
a.remove('9')
a
[Out]:
deque([‘a’, ‘l’, ‘b’, ‘c’, ‘3’, ‘d’, ‘w’, ‘e’, ‘a’, ‘9’, ‘e’])
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.remove('9')
a
[Out]:
deque([1, 2, ‘W’, 3, ‘#’, 9, 6, ‘9’, 5])
clear() - 移除所有元素,使其长度为0.
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.clear()
a
[Out]:
deque([])
– 改 –
rotate(n=1) - 向右循环移动 n 步。
- 如果 n 是负数,就向左循环。
- 如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.rotate()
a
[Out]:
deque([5, 1, 2, ‘W’, 3, ‘9’, ‘#’, 9, 6, ‘9’])
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.rotate(1)
a
[Out]:
deque([5, 1, 2, ‘W’, 3, ‘9’, ‘#’, 9, 6, ‘9’])
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.rotate(2)
a
[Out]:
deque([‘9’, 5, 1, 2, ‘W’, 3, ‘9’, ‘#’, 9, 6])
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.rotate(-1)
a
[Out]:
deque([2, ‘W’, 3, ‘9’, ‘#’, 9, 6, ‘9’, 5, 1])
– 查 –
index(x[, start[, stop]]) - 返回 x 在 deque 中的位置(由值反查索引)。
- 可选参数start与stop指定了查询范围在索引 start 之后,索引 stop 之前。
- 返回第一个匹配项,如果未找到则引发 ValueError。
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.index('#',0,3)
[Out]:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-101-453fb381b6f0> in <module>1 from collections import deque2 a = deque([1,2,'W',3,'9','#',9,6,'9',5])
----> 3 a.index('#',0,3)ValueError: '#' is not in deque
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.index('#',0,6)
[Out]:
5
Deque对象还提供了一个只读属性:
maxlen - Deque的最大尺寸。
- 若没有限定则为 None 。
– 统计与排序–
count(x) - 计算 deque 中元素等于 x 的个数。
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.count('9')
[Out]:
2
reverse() - 将deque逆序排列。
- 返回 None 。
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
a.reverse()
a
[Out]:
deque([5, ‘9’, 6, 9, ‘#’, ‘9’, 3, ‘W’, 2, 1])
– 浅拷贝–
[注]:(点击超链接查看相关知识点)
copy() - 创建一份浅拷贝。
【eg】
from collections import deque
a = deque([1,2,'W',3,'9','#',9,6,'9',5])
b = a.copy()
b[2] = '666'
print(a,'\n',b)
[Out]:
deque([1, 2, ‘W’, 3, ‘9’, ‘#’, 9, 6, ‘9’, 5])
deque([1, 2, ‘666’, 3, ‘9’, ‘#’, 9, 6, ‘9’, 5])
但要注意,Python变量的赋值是指针的复制,如果变量a直接赋值到b,则改变b也会改变a的值,因为他们修改了同一块内存空间:
from collections import deque a = deque([1,2,'W',3,'9','#',9,6,'9',5]) b = a b[2] = '666' print(a,'\n',b)
[Out]:
deque([1, 2, ‘666’, 3, ‘9’, ‘#’, 9, 6, ‘9’, 5])
deque([1, 2, ‘666’, 3, ‘9’, ‘#’, 9, 6, ‘9’, 5])
除了以上操作,deque 还支持迭代、封存、len(d)、reversed(d)、copy.copy(d)、copy.deepcopy(d)、成员检测运算符 in 以及下标引用例如通过 d[0] 访问首个元素等。 索引访问在两端的复杂度均为 O(1) 但在中间则会低至 O(n)。 如需快速随机访问,请改用列表。 Deque从版本3.5开始支持 __add__(), __mul__(), 和 __imul__() 。
Python容器专题 - deque(队列)--双向队列对象相关推荐
- Python教程:Python内置数据结构之双向队列!
经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...
- Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)
Deque(双向队列 c++模版实现 ) 算法导论第三版第十章10.1-5题 #ifndef C11LEARN_DEQUE_H #define C11LEARN_DEQUE_H template< ...
- Python容器专题 - 元组(tuple)
Python容器专题 - 元组(tuple) 导读:本文详细讲述了Python语言中的元组(tuple)的用法. 博主:李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题 ...
- Python容器专题 - 列表(list)
Python容器专题 - 列表(list) 导读:原文Python容器内容较长不便于阅读和查询,因而被分割称为了多个模块,本文只其中之一.在本文中,详细讲述了Python语言中的列表(list)及其用 ...
- Python培训教程:Python内置数据结构之双向队列
经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...
- Python内置数据结构之双向队列
经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...
- python3 deque(双向队列)
转载:https://www.cnblogs.com/zhenwei66/p/6598996.html 创建双向队列 import collections d = collections.deque( ...
- python3入门之 deque(双向队列)
创建双向队列 >>> import collections >>> d = collections.deque() append(往右边添加一个元素) >&g ...
- C++的STL标准库学习(deque)双向队列
初始化定义容器(可以为int,double,char,string,struct) deque<int>a; deque<double>a; deque<char&g ...
最新文章
- 处理 react_【学习教程】React 中阻止事件冒泡的问题
- pads pcb导出pdf文件_干货 | 学会设计不规则形状PCB,看这一篇就够了
- 3.3.2 差错控制(检错编码)
- mysql试题百度云_BATJ大厂600多道技术面试题及答案解析
- 【转】更改远程桌面默认端口3389及删除远程桌面连接历史记录
- 使用哪种关机方式后再启动计算机时间最长,有没有哪一种软件可以使电脑在设置好时间后自动开关机...
- 初级Web前端工程师是什么?初级Web前端工程师的技术体系有哪些?
- SAP动态下载数据库表数据至EXCEL
- 【AD】Altium Designer PCB文件的绘制(上篇:PCB基础和布局)
- ABAP 供应商主数据比较常用的表
- 金蝶eas怎么引出凭证_如何引出会计分录序时簿?
- js前端构造json对象后台接收并反序列化
- 解决Aid Learning无法联网问题
- c语言中calloc函数,C 库函数 – calloc()
- 谢烟客-----计算机基础
- 什么是SVG及使用方式
- 【计算机网络】—— 数据链路层的功能概述
- 微信APP支付申请方法
- 选中exchange缓存模式后 GAL不会更新
- linux配置和查看主机名
热门文章
- 台大李宏毅Machine Learning 2017Fall学习笔记 (1)Introduction of machine Learning
- tensorflow学习之常用函数总结:tensorflow.cast()函数
- 卷积法求解光斑质心(附源码,C++、opencv)
- python numpy : list VS np.array
- 实现简单render函数
- 元素定位-XPATH定位方法总结
- Swift 3.0 使用Core Data
- 面向对象编程:Java复杂数据类型用法
- 一些值得借鉴的处事、励志语句
- eyoucms如何调用指定栏目下的推荐文章