聊聊 Python 的双向队列

作者:神秘网友 发布时间:2020-10-27 16:21:07

聊聊 Python 的双向队列

Python教程今天介绍双向队列。

聊聊 Python 的双向队列

虽然可以使用 Python 列表的 .append 和 .pop 方法模拟栈或者队列,但删除列表的第一个元素或者在第一个元素之前添加一个新元素,都非常耗时。因为需要把列表中的所有元素向后移动。

Python 的双向队列使用 collections.deque 类来实现。它是一个线程安全且可以快速从两端添加或者删除元素的类。

deque /d?k/

也可以利用 collections.deque 类来实现缓存。首先先指定缓存队列的大小,然后从队首删除过期元素和在队尾添加新元素。

Luciano Ramalho 举了一个示例来说明双向队列的基本用法。

from collections import deque

dq = deque(range(10), maxlen=10)
logging.info('dq -> %s', dq)

dq.rotate(3)
logging.info('dq -> %s', dq)

dq.rotate(-4)
logging.info('dq -> %s', dq)

dq.extend([11, 22, 33])
logging.info('dq -> %s', dq)

dq.extendleft([10, 20, 30, 40])
logging.info('dq -> %s', dq)复制代码

运行结果:

INFO - dq -> deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
INFO - dq -> deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
INFO - dq -> deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
INFO - dq -> deque([4, 5, 6, 7, 8, 9, 0, 11, 22, 33], maxlen=10)
INFO - dq -> deque([40, 30, 20, 10, 4, 5, 6, 7, 8, 9], maxlen=10)复制代码
  1. maxlen 是 deque 的可选参数,用于指定队列容量,即可以放多少个元素。
  2. rotate() 方法可以旋转队列。它有一个入参 n ,当 n >0时,队列从最右边开始的 n 个元素会被移动到左边。当 n <0时,队列从最左边开始的 n 个元素会被移动到右边。
  3. extend() 方法可以为队列添加新元素,它接受一个列表作为入参,会把列表中的所有元素添加到队列中。新的元素放置在队列右边。
  4. 如果在添加新元素时发现队列已满,这时就会自动删除队首的元素。
  5. extendleft(iter) 方法是把新增的元素放置在队列左边。其它特性与 extend() 方法相同。

双向队列也不是完美的,如果从队列中间位置删除元素就比较慢,因为它只针对队列的头尾操作做了优化。

相关免费学习推荐:python教程(视频)

聊聊 Python 的双向队列的教程已介绍完毕,更多请关注跳墙网其他文章教程!

聊聊 Python 的双向队列相关教程

  1. python学习值爬取百度翻译

    python学习值爬取百度翻译 # 功能: 进行爬虫项目编写# 开发时间: 2020/10/26 10:12import requestsimport jsonif __name__ == '__main__': #进行UA伪装,将userAgent分装到一个字典对象当中去,user-agent可以到浏览器当中通过抓包工具来获取 headers={'User-

  2. 《Python编程从入门到实践》笔记:18章 Django入门

    《Python编程从入门到实践》笔记:18章 Django入门 《Python编程从入门到实践》笔记:18章 Django入门 #django版本和python版本的对应Django version python versions1.8 2.7,3.2,3.3,3.4,3.51.9,1.10 2.7,3.4,3.51.11 2.7,3.4,3.5,3.62.0 3.4,3.5,3.62.1,2.2

  3. 一、Python复习教程(重点)- 基础

    一、Python复习教程(重点)- 基础 目录导航: 文章目录 目录导航: 一、Python基础 1.1 Python安装和使用 1.1.1 Python环境搭建 1.1.2 运行Python (1) 交互式解释器 (2) 命令行脚本 (3) 集成开发环境(IDE:Integrated Development Environment): PyCharm 1

  4. python面向对象编程构造函数和析构函数

    python面向对象编程构造函数和析构函数 Python提供了一个函数dir,可以传对象,也可以传类名,它可以打印出这个类里面的所有成员。 print(Test Class)class Video(object): # 构造函数 def __init__(self): print(Create Video) # 析构函数 def __del__(self)

  5. 二、Python复习教程(重点)- 前端框架

    二、Python复习教程(重点)- 前端框架 目录导航: 文章目录 目录导航: 三、Web前端 1.1 Web前端开发介绍 1. Web网站介绍 2. 动态网站开发所需的Web构件 3. Web的工作原理 1.2 HTML基础语法 (缺) 1.3 HTML常用标签介绍 1.3.1 文本标签: 1.3.2 格式化标签:

  6. python画散点图

    python画散点图 python画散点图 问题描述 实例 数据准备 绘制散点图 结果展示 参考 问题描述 总结一个普遍的画图格式太难了,我就举一个比较复杂的例子来说明,比如我有一个嵌入向量矩阵(N*128),想将其可视化到二维平面,所以就用t-sne将其降维并画出散点图

  7. 【python】办公小工具之批量给文件重命名

    【python】办公小工具之批量给文件重命名 【python】办公小工具之批量给文件重命名 PYTHON代码(参考网上资源+自己摸索) 读取文件夹中所有的文件名([百度经验](https://jingyan.baidu.com/article/3aed632e3917c870108091d1.html)): 操作方法 封装exe的方

  8. uni-app使用VantWeapp ,van-field表单提交无法双向绑定,提交等

    uni-app使用VantWeapp ,van-field表单提交无法双向绑定,提交等问题 在uniapp用到vantWeapp中的van-field标签时因没有父级元素的van-form 和无法双向绑定数据 先上代码 templateviewview class=qwsssf align=center van-image round width=100px height=100p