简单介绍python的双向队列

简单介绍python的双向队列

介绍

  大家都知道利用 .append 和 .pop 方法,我们可以把列表当作栈或者队列来用(比如,把 append 和 pop(0) 合起来用,就能模拟栈的“先进先出”的特点)。但是删除列表的第一个元素(抑或是在第一个元素之前添加一个 元素)之类的操作是很耗时的,因为这些操作会牵扯到移动列表里的所有元素。这个时候双向队列就又作用了。

deque 是什么

  collections.deque 类(双向队列)是一个线程安全、可以快速从两端添加或者删除元素的数据类型。而且如果想要有一种数据类型来存 放“最近用到的几个元素”,deque 也是一个很好的选择。这是因为在新建一个双向队列的时候,你可以指定这个队列的大小,如果这个队列满员了,还可以从反向端删除过期的元素,然后在尾端添加新的元素。

下面用几个实例来说明如何使用双向队列以及带来了什么方便的处理方式。

一开始我们需要先初始化一个固定长度的双向队列便于我们实验。

说明:maxlen 是一个可选参数,代表这个队列可以容纳的元素的数量,不可变。

from collections import  deque
#双向队列
listdq=deque(range(10),maxlen=10)
print (listdq)

1.正向旋转(循环)

 说明:队列的旋转操作接受一个参数 n,当 n > 0 时,队列的最右边的 n 个元素会被移动到队列的左边。当 n < 0 时,最左边的 n 个元素会被 移动到右边。

#正向旋转
listdq.rotate(2)
print(listdq)

2.反向旋转(逆时针)

#反向旋转
listdq.rotate(-2)
print(listdq)

3.附加数据

说明:当试图对一个已满(len(d) == d.maxlen)的队列做尾部添加操作的时候,它头部的元素会被删除掉。注意在下一行里,元素 0 被删除 了。


#附加数据
listdq.appendleft(-1)
print(listdq)
listdq.append(10)
print(listdq)
 

4.扩展数据

说明:extendleft(iter) 方法会把迭代器里的元素逐个添加到双向队列的左边,因此迭代器里的元素会逆序出现在队列里。注意是逆序。

#扩展数据
listdq.extendleft([20,30,40])
print(listdq)
listdq.extend([50])
print(listdq)

以上代码结果如下:

<span>简单介绍python的双向队列</span>

双向列表和队列的方法介绍:

<span>简单介绍python的双向队列</span>

 

总结:

本篇总结了列表和双向队列这两个类型的方法(object 类包含的方 法除外)。
双向队列实现了大部分列表所拥有的方法,也有一些额外的符合自身设 计的方法,比如说 popleft 和 rotate。但是为了实现这些方法,双向 队列也付出了一些代价,从队列中间删除元素的操作会慢一些,因为它 只对在头尾的操作进行了优化。
append 和 popleft 都是原子操作,也就说是 deque 可以在多线程程序 中安全地当作先进先出的栈使用,而使用者不需要担心资源锁的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119657.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • RecycleView 获取第一个可见条目(掉坑篇)

    RecycleView 获取第一个可见条目(掉坑篇)

  • 免备案云服务器选香港好还是美国好

    免备案云服务器租用哪里的?免备案云服务器主要是指那些不受国内工信部约束管理的主机产品。也就是说,国内工信部管理的大陆地区云服务器产品需要备案,海外其他国家的主机是不用备案的,比较特殊的是中国香港主机、澳门和台湾空间产品,也是不用备案的。大家常用的免备案云服务器是香港和美国云服务器,这两地的技术发达,云服务器的性能完善,包含防攻击、数据备份、弹性伸缩、平台安全性保证,可支持软硬件在线升级等等。美国云服务器美国云服务中心拥有高级的安保措施,数据安全性和服务稳定性是世界一流标准。ip资源丰富,价格低廉,在

  • 基于B样条曲线的路径规划(含matlab代码免费下载)[通俗易懂]

    基于B样条曲线的路径规划(含matlab代码免费下载)[通俗易懂]本文主要解决的是用B样条曲线实现无人车的路径规划,对于B样条曲线的概念不再赘述,有兴趣的朋友可以自行去了解。下面介绍如何利用B样条曲线对小车进行路径规划。1.无人车平面曲线规划1.1无人车位置控制我们一般假设无人车只移动在平地或者类平面场地,跟着我们期望的曲线运动。原理设点的坐标为(xd,yd),则可得到θd的表达式为那么在实际应用中,我们如何生成一条期望曲线并让小车跟随它运动呢?1.2小车移库问题我们在生活中最常见的就是小车移库问题,这也是无人车类比赛中最基础的一类题目。因为小车

  • 随机森林算法(有监督学习)

    随机森林算法(有监督学习)一、随机森林算法的基本思想  随机森林的出现主要是为了解单一决策树可能出现的很大误差和overfitting的问题。这个算法的核心思想就是将多个不同的决策树进行组合,利用这种组合降低单一决策树有可能带来的片面性和判断不准确性。用我们常说的话来形容这个思想就是“三个臭皮匠赛过诸葛亮”。  具体来讲,随机森林是用随…

  • MyBatis中Like语句使用方式

    Mybatis中Like的使用,防止Sql注入

  • npm ERR! code E404 npm ERR! 404 Not Found – GET https://registry.npmjs.com/@mlamp%2fuser-info-dropdo

    npm ERR! code E404 npm ERR! 404 Not Found – GET https://registry.npmjs.com/@mlamp%2fuser-info-dropdonpmERR!codeE404npmERR!404NotFound-GEThttps://registry.npmjs.com/@mlamp%2fuser-info-dropdown-Notfound当我npminstall的时候出现这个错误原因是npm源指向的问题执行:npmconfigsetregistryhttps://registry.npmjs.org/问题的原因出现在:在Vue/react/angular框架中打包和编译时报错。使用指令为项目

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号