什么是队列?Python中如何使用队列(62)

news/2024/11/24 9:20:40/

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

什么是队列?

队列有哪些接口(api)?

在Python中如何表示队列?

什么是队列

队列是一个特殊的有序表,其插入操作在表的一端进行,而删除操作在表的另一端进行,插入的端叫队尾,删除的端叫队首。

队列有先进先出的特性。

在我们的生活中,有很多都属于队列,比如排队买票,排队安检等。

队列有哪些接口

add(x):入队,加入队列

delete():出队,从队列中出来

clear():清空队列

isEmpty():判断队列是否为空

isFull():判断队列是否为满

length():队列的当前长度

capability():队列的容量,也就是队列满时的长度

Python中的双端队列deque

在Python中的标准库collections中,包含了一个模块:双端队列deque。

队列是在一端入队,另一端出队。

双端队列呢?

就是在两个端口都可以入队和出队。

双端队列的导入

导入deque:

from collections import deque

双端队列的创建

创建空的双端队列:

q=deque()

创建一个非空双端队列,可以传入一个可迭代对象:

q=deque([1,2,3])

可以指定双端队列的容量。如上不指定容量,表示可以无限入队。

q=deque([1,2,3],10)

入队操作

q.append(4):右端入队一个元素

q.appendleft(5):左端入队一个元素

q.extend([a,b,x]):右端入队多个元素,相当于多次q.append

q.extendleft([x,y,z]):左端入队多个元素,相当于多次q.appendleft

出队操作

q.pop():右端出队

q.popleft():左端出队

清空队列

q.clear():清空队列

队列容量

q.maxlen:队列的最大容量。

如果初始化队列时未指定队列最大容量,那么它是None。

队列当前长度

len(q):用函数len测量双端队列q的长度

队列是否满

q.maxlen == q.popleft():当前长度等于最大长度,双端队列满

队列为空

not q:True表示队列为空,否则非空。

其他接口之count

它可以统计相同元素的个数

q=deque([1,2,2,3,4,5,6])

print(q.count(2))#2

其他接口之remove

删除指定元素

q=deque([1,2,2,3,4,5,6])

print(q.remove(2))

print(q)#deque([1,2,3,4,5,6)]

其他接口之reverse

翻转顺序

q=deque([1,2,3,4,5,6])

print(q.reverse())#deque([6,5,4,3,2,1)]

其他接口之rotate

转动,循环

q=deque([1,2,3,4,5,6])

print(q.rotate(1))#deque([6,1,2,3,4,5)]

q=deque([1,2,3,4,5,6])

print(q.rotate(2))#deque([5,6,1,2,3,4)]

q=deque([1,2,3,4,5,6])

print(q.rotate(-1))#deque([2,3,4,5,6,1)]

q=deque([1,2,3,4,5,6])

print(q.rotate(-2))#deque([3,4,5,6,1,2)]

几道编程思考题

看得出来,双端队列deque,功能强大,api全面。

在解决实际问题中,队列经常使用。

这里抛砖引玉,引出几道编程思考题目,你可以用队列知识搞定它吗?

杨辉三角

杨辉三角是中国数学史上的一个伟大成就,如下图。

它每层的数据都很有规律,首尾都是1。除第一、二层外,其他层的非边缘数据都来源于上层两个数据的和。

第n层数据是怎样的?

划分无冲突子集问题

某动物园搬家,要运走N种动物,老虎与狮子放进一个笼子打架,大象与犀牛放一个笼子打架,野猪与猎狗放在一个笼子里打架…设计算法,使得装进同一个笼子的动物互相不打架。

A={0,1,2,3,4,5,6,7,8}#代表N种动物的集合,

R={(1,4),(4,8),(1,8),(1,7),(8,3),(1,0),(0,5),(1,5),(3,4),(5,6),(5,2),(6,2),(6,4)}#冲突关系集合

数字变换

对于一对正整数a和b,对a只能进行加1,减1,乘2操作,问最小对a进行几次操作能得到b?

例如:

a=3,b=11,可通过3*2*2-1,3次操作得到11

a=5,b=8,可通过(5-1)*2,2次操作得到8

上述三个应用,都可以通过Python用队列编程来解决问题哦!

猫妹也会持续更新的,敬请关注!

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!


http://www.ppmy.cn/news/534416.html

相关文章

深度学习--深度学习框架对比

框架简介优点缺点点评Theano2008年诞生于LISA实验室,其设计具有较浓厚的学术气息。 作为第一个Python深度学习框架,Theano很好的完成了自己的使命,为之后深度学习框架的开发奠定了基本设计方向: 以计算图为框架的核心,…

深入理解深度学习——BERT(Bidirectional Encoder Representations from Transformers):NSP任务

分类目录:《深入理解深度学习》总目录 相关文章: BERT(Bidirectional Encoder Representations from Transformers):基础知识 BERT(Bidirectional Encoder Representations from Transformers&#xff09…

基于深度学习的高精度抽烟行为检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度抽烟行为检测识别系统可用于日常生活中或野外来检测与定位抽烟行为目标,利用深度学习算法可实现图片、视频、摄像头等方式的抽烟行为目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

Vue中用计算属性来实现过滤(比watch来实现好一点)

<html> <head> <meta charset"UTF-8" /> <title>初始条件渲染</title> <!-- 引入Vue --> <script type"text/javascript" src"../js/vue.js"></script> </head> <body> <div i…

Rust 自建HTTP Server支持图片响应

本博客是在杨旭老师的 rust web 全栈教程项目基础上进行修改&#xff0c;支持了图片资源返回&#xff0c;杨旭老师的rust web链接如下&#xff1a; https://www.bilibili.com/video/BV1RP4y1G7KFp1&vd_source8595fbbf160cc11a0cc07cadacf22951 本人默认读者已经学习了相关…

海信舒适家空调新品发布 跨界满足用户差异化需求

本文来自万维家电网 消费升级大趋势下&#xff0c;用户渴望呼吸健康清洁的空气&#xff0c;享受品质生活。通过技术创新实现产品差异化&#xff0c;满足更高消费需求在争夺空调市场话语权上尤为重要。科技创新作为海信空调稳健发展的第一生产力&#xff0c;正在成功撬动海信在…

关键字搜索天猫商品api调用展示

为了进行此平台API的调用&#xff0c;首先我们需要做下面几件事情。 1&#xff09;建立一个key 2&#xff09;然后为应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载 API的SDK并掌握基本的API基础知识和调用 4&#xff09;利用SDK接口和对象&#xff0c;…

双11家电:你卖的是“地板价”,还是“天价”

今年的双11&#xff0c;家电市场格外热闹。11月9日&#xff0c;格力电器宣布“双11”期间将让利30亿元打击低质伪劣产品&#xff0c;此后,美的、奥克斯、海信等纷纷跟进。 打折促销带来的销售推动显而易见。格力官微的双11战报显示&#xff0c;格力电器用时21分36秒&#xff0…