collections之deque【双向队列】与Queue【单向队列】
今天来向大家介绍两个队列,一个是deque,双向队列,另外一个是Queue,单向队列,队列和堆栈不同,队列为先进先出,大家还需要注意一下,双向队列为collections模块中的类,而Queue为queue模块中的类,大家不要被我博客的标题干扰;
下面先来介绍一下双向对象deque
1、创建一个deque【双向队列】,同样,我们肯定要先import colles模块
import collections #deque为collections中的双向队列,是先进先出,和堆栈正好相反
obj = collections.deque()
print(type(obj))
# <class 'collections.deque'>
2、append方法,是在队列的右边添加一个元素,每次后面添加的元素就会被放到最右边
obj.append("1")
obj.append("2")
print(obj)
# deque(['1', '2'])
3、appendleft方法,是在队列的左边添加一个元素,每次后面添加的元素就会被放在最左边
obj.appendleft("a")
obj.appendleft("b")
print(obj)
# deque(['b', 'a', '1', '2'])
4、clear方法,可以清空deque
print(obj)
# deque(['b', 'a', '1', '2'])
obj.clear()
print(obj)
# deque([])
5、count方法,可以统计deque中某个元素出现的次数,如果该元素不存在,则次数为0
print(obj)
# deque(['b', 'a', '1', '2', '2'])
r = obj.count("2")
print(r)
# 2
r = obj.count("c")
print(r)
# 0
6、前面介绍的append方法一次只能添加一个元素,这里的extend方法可以一次添加多个元素到deque中,同样,肯定是添加的deque中的最右边
print(obj)
# deque(['b', 'a', '1', '2', '2'])
l1 = ["a","b","c"]
obj.extend(l1)
print(obj)
# deque(['b', 'a', '1', '2', '2', 'a', 'b', 'c'])
7、extendleft是一次可以添加多个元素到deque中,同样,肯定是添加到deque的最左边
print(obj)
# deque(['b', 'a', '1', '2', '2', 'a', 'b', 'c'])
l1 = ["a","b","c"]
obj.extendleft(l1)
print(obj)
# deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
8、index方法,可以获取某个元素在queue中的索引,同样,如果该元素在deque中出现多次,则只会得到最左边的该元素的索引
print(obj)
# deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
r = obj.index("b")
print(r) # 1
9、insert方法,在指定的索引的位置插入元素
print(obj)
# deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
obj.insert(0,"0")
print(obj) # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
10、pop方法,从右边开始删除deque中的元素,同样,我们也可以接受到被删除的元素
print(obj)
# deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
r = obj.pop()
print(r)
# c
print(obj)
# deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b'])
r = obj.pop()
print(r)
# b
print(obj)
# deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
11、popleft,从左边开始删除deque中的元素,同样,我们可以接受到被删除的元素
print(obj)
# deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
r = obj.popleft()
print(r)
# 0
print(obj)
# deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
r = obj.popleft()
print(r)
# c
print(obj)
# deque(['b', 'a', 'b', 'a', '1', '2', '2', 'a'
12、remove方法,可以删除指定的元素,同样如果deque中存在多个该元素,则只会删除最左边的那个元素
# obj.remove() 删除指定的元素,如果deque中有多个相同的元素,则只会删除从左边开始的第一个碰到元素
print(obj)
# deque(['b', 'a', 'b', 'a', '1', '2', '2', 'a'])
obj.remove("b")
print(obj)
# deque(['a', 'b', 'a', '1', '2', '2', 'a'])
13、reverse方法,可以实现反转deque
print(obj)
# deque(['a', 'b', 'a', '1', '2', '2', 'a'])
obj.reverse()
print(obj)
# deque(['a', '2', '2', '1', 'a', 'b', 'a'])
14、rotate方法,可以实现收尾相连,rotate方法可以带一个数字,如果没有带任何参数,则默认把最右边的元素放在左边,如果带了参数,如果为2,则先把最右边的元素放在最左边,然后在把最右边的元素放在最左边
print(obj)
# deque(['a', '2', '2', '1', 'a', 'b', 'a'])
obj.rotate()
print(obj)
# deque(['a', 'a', '2', '2', '1', 'a', 'b'])
obj.rotate(2)
print(obj)
# deque(['a', 'b', 'a', 'a', '2', '2', '1'])
上面我们就把deque的方法介绍完了,下面我们来介绍一下Queue类
需要特别强调,Queue的类来在queue模块,而不是collections模块,Queue也就是我们所说的单向队列
1、创建一个Queue,需要先import queue模块,例子中参数4为该Queue最多可以存放4个元素
import queue
obj = queue.Queue(4)
print(type(obj))
# <class 'queue.Queue'>
2、put方法,给Queue中增加元素
obj.put("a")
obj.put("b")
obj.put("c")
obj.put("d")
print(obj)
# <queue.Queue object at 0x01B231D0>
3、qsize方法,统计Queue的长度
r = obj.qsize()
print(r)
# 4
4、get方法,从Queue的最右边取元素,取出一个元素,则Queue的长度会减1
r = obj.get()
print(r)
# a
r = obj.get()
print(r)
# b
r = obj.qsize()
print(r)
# 2
5、full方法,查看Queue队列是否满,也就是我们在创建Queue的时候可以带一个参数,这个参数就是这个队列的最大长度
r = obj.qsize()
print(r)
# 2
r = obj.full()
print(r)
# False
obj.put("a")
obj.put("b")
r = obj.full()
print(r)
# True
6、empty方法,如果Queue为空,则返回True,如果不为空,则返回False
r = obj.qsize()
print(r)
# 4
print(obj.empty())
# False obj_empty = queue.Queue()
r = obj_empty.qsize()
print(r)
# 0
print(obj_empty.empty())
# True
collections之deque【双向队列】与Queue【单向队列】的更多相关文章
- STL --> queue单向队列
queue单向队列 queue 模板类的定义在<queue>头文件中.与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器 ...
- python线程+队列(queue)
---恢复内容开始--- python的线程学习 用处 pocpiliang脚本的编写 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程.语法如下: _thr ...
- collection系列用法-deque双向队列
deque双向队列 Deque可以从两端添加和删除元素.常用的结构,是它的简化版本. Deque支持序列的常用操作,现在举一个简单例子,你会发现其实跟平成的list没啥区别: import colle ...
- STL中的单向队列queue
转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...
- C# 队列(Queue)和 堆栈(Stack)
C# 队列(Queue)和 堆栈(Stack) C# 队列(Queue) 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队 ...
- java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用
1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...
- Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...
- 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
随机推荐
- CentOS命令行性能检测工具
一.uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average).load average值分别记录了上个1分钟,5分钟和1 ...
- [UE4]为什么会有类型检查
类型检查 定义:对象的行为是否符合类型的行为 作用:帮助开发者找出潜在的错误. 类型转换 隐式类型转换:整数可以和浮点数运算 显式类型转换/强制类型转换
- Dance GAN 迁移不同视频中人物动作的方法
该研究提出一种迁移不同视频中人物动作的方法.给出两个视频,一个视频中是研究者想要合成动作的目标人物,另一个是被迁移动作的源人物,研究者通过一种基于像素的端到端流程在人物之间进行动作迁移(motion ...
- 跳表(skiplist)Python实现
# coding=utf-8 # 跳表的Python实现 import random # 最高层数设置为4 MAX_LEVEL = 4 def randomLevel(): ""& ...
- 经典算法 Morris遍历
内容: 1.什么是morris遍历 2.morris遍历规则与过程 3.先序及中序 4.后序 5.morris遍历时间复杂度分析 1.什么是morris遍历 关于二叉树先序.中序.后序遍历的递归和非递 ...
- 高斯混合模型(理论+opencv实现)
查资料的时候看了一个不文明的事情,转载别人的东西而不标注出处,结果原创无人知晓,转载很多人评论~~标注了转载而不说出处这样的人有点可耻! 写在前面: Gaussian Mixture Model (G ...
- tcp协议和udp协议的使用场景
一:什么是TCP(Transmission Control Protocol,传输控制协议) tcp是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次 ...
- OpenCL 归约 1
▶ 照着书上的代码,写了几个一步归约的计算,只计算一步,将原数组归约到不超过 1024 个工作项 ● 代码 // kernel.cl __kernel void reduce01(__global u ...
- mysql 集群 数据同步
mysql集群配置在网站负载均衡中是必不可少的: 首先说下我个人准备的负载均衡方式: 1.通过nginx方向代理来将服务器压力分散到各个服务器上: 2.每个服务器中代码逻辑一样: 3.通过使用redi ...
- eclipse override报错
转自:https://www.cnblogs.com/libra0920/p/6408891.html 错误: 在 eclipse 的新工作空间开发项目时,出现大面积方法编译错误.鼠标放在方法名上后显 ...