python学习

Python队列:FIFO,LIFO

什么是Python队列?

队列是保存数据的容器。 首先输入的数据将被首先删除,因此队列也称为“先进先出”(FIFO)。 队列有两个前端。 这些项目是从后面输入的,并且是从前面删除的。

在这小节中,我们将学习以下内容:

什么是Python队列?Python队列如何工作?Python中的队列类型Python队列安装Queue和LifoQueue类中可用的方法先进先出队列示例后进先出队列示例在队列中添加多个项目排序队列反转队列Python队列如何工作?

可以将队列与现实世界中的例子进行比较,例如排队的人在售票柜台排队,首先站着的人将首先获得票,然后是下一个人,依此类推。 队列数据结构也采用相同的逻辑。

以下是队列的示意图:

Rear表示将元素插入队列中的位置。 在上面示例中,值是7。

Front 表示从队列中删除元素的点。 如果从队列中删除一个元素,则得到第一个元素1,如上图所示。

元素1是要插入队列中的第一个元素,而删除则是第一个出现的元素。 因此,该队列称为FIRST IN FIRST OUT(FIFO),也叫先进先出。

在队列中,元素是按顺序删除的,并且不能从两者之间删除。 我们不能从队列中随机删除元素5,为此,将必须删除5之前的所有元素,队列中的元素将按照插入顺序删除。

Python中的队列类型

Python中主要有2种类型的队列:

先进先出队列:为此,最先出现的元素将是第一个出现的元素。要使用FIFO,您必须从队列模块调用Queue()类。后进先出队列:在这里,最后输入的元素将是第一个出现的元素。要使用LIFO,必须从队列模块中调用LifoQueue()类。

Python队列安装

在python中使用队列非常容易。 以下是使用队列的步骤。

步骤1)导入队列模块,如下所示:

import queue

默认情况下,该模块可用于python,并且不需要任何其他安装即可开始使用队列。 队列FIFO有2种类型(先进先出)和LIFO(先进先出)。

步骤2)要使用FIFO队列,请使用导入的队列模块调用Queue类,如下所示:

import queue

q1 = queue.Queue()

步骤3)要使用LIFO队列,请调用LifoQueue()类,如下所示:

import queue

q1 = queue.LifoQueue()

Queue和LifoQueue类中可用的方法

以下是Queue和LifoQueue类中可用的重要方法:

put(item):这会将项目放入队列中。get():这将从队列中返回一个项目。empty():如果队列为空,则返回true;如果存在项目,则返回false。qsize():返回队列的大小。full():如果队列已满,则返回true,否则返回false。

先进先出队列示例

在先进先出的情况下,最先出现的元素将是第一个出现的元素。

在队列中添加元素

让我们来看一个在队列中添加元素的示例。

要开始使用队列,请导入模块队列,如下例所示。

import queue

q1 = queue.Queue()

q1.put(10)

默认情况下,队列的大小是无限的,我们可以向其中添加任意数量的元素。 如果我们要定义队列的大小,可以按照以下步骤进行操作;

import queue

q1 = queue.Queue(5)

q1.put(1)

q1.put(2)

q1.put(3)

q1.put(4)

q1.put(5)

print(q1.full())

输出:

True

现在,队列的大小为5,它将不超过5个元素,并且方法q1.full()将返回true。 添加更多元素不再执行代码。

从队列中删除元素

要从队列中删除元素,可以使用get()方法;以下示例

import queue

q1 = queue.Queue()

q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

输出:

The item removed from the queue is 10

后进先出队列示例

对于后进先出队列,最后输入的元素将是第一个出现的元素。

要使用LIFO,即先进先出队列,我们需要导入队列模块并使用LifoQueue()方法

在队列中添加元素

在这里,我们将了解如何向LIFO队列添加元素。

import queue

q1 = queue.LifoQueue()

q1.put(10)

如上例所示,必须在LifoQueue上使用put()方法。

从队列中删除元素

要从LIFOqueue中删除项目,可以使用get()方法。

import queue

q1 = queue.LifoQueue()

q1.put(10)

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

输出:

The item removed from the LIFO queue is 10

在队列中添加多个元素

在上面的示例中,我们已经看到了如何添加单个元素并为FIFO和LIFOqueue删除其中的元素。 现在,我们看如何添加多个元素并将其删除。

在FIFO队列中添加元素

import queue

q1 = queue.Queue()

for i in range(20):

q1.put(i)

从FIFO队列中删除一个元素

import queue

q1 = queue.Queue()

for i in range(20):

q1.put(i)

while not q1.empty():

print("The value is ", q1.get())

输出:

The value is 0

The value is 1

The value is 2

The value is 3

The value is 4

The value is 5

The value is 6

The value is 7

The value is 8

The value is 9

The value is 10

The value is 11

The value is 12

The value is 13

The value is 14

The value is 15

The value is 16

The value is 17

The value is 18

The value is 19

在LIFOqueue中添加元素

import queue

q1 = queue.LifoQueue()

for i in range(20):

q1.put(i)

从LIFOqueue中移除元素

import queue

q1 = queue.LifoQueue()

for i in range(20):

q1.put(i)

while not q1.empty():

print("The value is ", q1.get())

输出:

The value is 19

The value is 18

The value is 17

The value is 16

The value is 15

The value is 14

The value is 13

The value is 12

The value is 11

The value is 10

The value is 9

The value is 8

The value is 7

The value is 6

The value is 5

The value is 4

The value is 3

The value is 2

The value is 1

The value is 0

排序队列

以下示例显示了队列排序。

import queue

q1 = queue.Queue()

q1.put(11)

q1.put(5)

q1.put(4)

q1.put(21)

q1.put(3)

q1.put(10)

n = q1.qsize()

for i in range(n):

x = q1.get()

for j in range(n-1):

y = q1.get()

if x > y :

q1.put(y)

else:

q1.put(x)

x = y

q1.put(x)

while (q1.empty() == False):

print(q1.queue[0], end = " ")

q1.get()

输出:

3 4 5 10 11 21

反转队列

要反转队列,可以使用另一个队列和递归。

以下示例显示如何使队列反向:

import queue

q1 = queue.Queue()

q1.put(11)

q1.put(5)

q1.put(4)

q1.put(21)

q1.put(3)

q1.put(10)

def reverseQueue (q1src, q2dest) :

buffer = q1src.get()

if (q1src.empty() == False) :

reverseQueue(q1src, q2dest)

q2dest.put(buffer)

return q2dest

q2dest = queue.Queue()

qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False):

print(qReversed.queue[0], end = " ")

qReversed.get()

输出:

10 3 21 4 5 11

摘要如下:

队列是保存数据的容器。 队列有两种类型,即FIFO和LIFO。对于FIFO(先进先出队列),最先出现的元素将是第一个出现的元素。对于LIFO(后进先出队列),最后输入的元素将是第一个出现的元素。使用put(item)方法添加队列中的元素。要删除项目,请使用get()方法。

希望这篇文章对你们有用,

欢迎在下方讨论留言,

谢谢关注.

java fifo lifo_一日一技:Python队列:FIFO 和 LIFO相关推荐

  1. 一日一技python安装_一日一技:快速实现Python 命令行参数

    一日一技:快速实现Python 命令行参数 摄影:产品经理 厨师:kingname 我们有时候需要使用 Python 开发一些命令行工具,并在运行命令的时候指定一些参数,例如: python3 xxx ...

  2. Python队列FIFO操作

    设定一个长度为N的队列,当元素满时候,就自动丢弃最先进入队列的数据: from collections import dequeq = deque(maxlen=3) q.append(1) q.ap ...

  3. python线程监控配置文件_一日一技:Python多线程的事件监控

    一日一技:Python多线程的事件监控 设想这样一个场景: 你创建了10个子线程,每个子线程分别爬一个网站,一开始所有子线程都是阻塞等待.一旦某个事件发生:例如有人在网页上点了一个按钮,或者某人在命令 ...

  4. python归并排序理解不了_一日一技:如何更好地理解归并排序?

    一日一技:如何更好地理解归并排序? 摄影:产品经理 厨师:kingname 请确保你已经看了我昨天的公众号文章.昨天的内容是今天的基础. 一日一技:在 Python 里面如何合并多个有序列表并使得结果 ...

  5. python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理

    一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...

  6. python模型预测结果 取整_一日一技:Python里面的//并不是做了除法以后取整

    一日一技:Python里面的//并不是做了除法以后取整 在Python 3里面,我们做除法的时候会遇到 a/b 和 a//b两种写法: >>> 10 / 3 3.3333333333 ...

  7. python文本格式上一日_一日一技:在 Python 中快速遍历文件

    一日一技:在 Python 中快速遍历文件 摄影:产品经理 厨师:产品经理 当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码: 没有子文件夹时 import os all_ ...

  8. python并列排名_一日一技:Python实现有序列表并列排名

    一日一技:Python实现有序列表并列排名 现在有一个有序的列表: [75,78,80,89,89,92,93]需要对他们按成绩进行排名. 说到排名,一般大家会这样写: grade_list = [7 ...

  9. python调用按键精灵插件_【一日一技】python模块的懒加载

    在编写python项目时,通常将需要使用的模块直接通过import关键字导入到项目中,如果后续逻辑变动了,这个模块不需要使用,此时这个模块就白引入了,此时可以利用 import 方法实现模块的懒加载. ...

  10. python延时执行函数_一日一技:在 Python 中实现延迟调用

    一日一技:在 Python 中实现延迟调用 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理的生日餐 熟悉 Golang 的同学都知道,Golang 里面有一个关键词叫做def ...

最新文章

  1. JavaWeb学习笔记(十)--HttpServletRequest
  2. python网络编程及高并发问题
  3. @即将开学的你,请收好这份必读论文清单
  4. 【转】3.3(译)构建Async同步基元,Part 3 AsyncCountdownEvent
  5. Centos jdk
  6. php $delaytime /= $delaytime,计算PHP / MySQL / JavaScript系统中的时差
  7. python3.5安装tensorflow_如何为Python 3.5安装OpenCV,Tensorflow和机器学习框架运行对象检测应用程序...
  8. keil如何下载STM32芯片F1/F4固件库
  9. 寻星时卫星数字电视接收机的信号检测功能
  10. Simulink 快速入门(六)-- 建模并验证系统
  11. python定义一个整数变量_Python变量和数据类型详解
  12. 去除高清视频锯齿几个方法
  13. STM32液晶显示中英文
  14. 摩拜单车,死于创新的一百万种方式
  15. 5个超好用的自媒体网站,免费用
  16. 如何随时远程开机并控制电脑
  17. 那些浏览器的神仙插件
  18. matlab如何解麦克斯韦方程,麦克斯韦方程组-Read.PPT
  19. 什么是计算机网络和互联网
  20. wow盗号木马事件前后

热门文章

  1. 图论们,小爷来ak你们啦瓦咔咔~
  2. linux wifi开机自动连接 wifi连接
  3. java中包、不同包下类之间的访问以及编译和运行示例
  4. 用python写飞机大战过几天不能运行了_最近写的一个飞机大战的程序,写到一半有一个已经写好的函数但不能运用,强行运行程序秒退,百思不得其姐...
  5. fifa一直连接服务器,FIFA足球世界服务器连接掉线原因及解决方法
  6. 从身边的移动支付说起
  7. ant design pro 关闭国际化语言
  8. python俄罗斯方块小游戏实验报告_用Python实现童年小游戏俄罗斯方块
  9. 15kw科比服务器型号,KEB变频器/keb伺服技术/KEB制动器
  10. html基础学习笔记