Python deque的用法介绍

2023-11-18

Python deque的用法介绍

deque 是Python标准库 collections 中的一个类,实现了两端都可以操作的队列,相当于双端队列,与Python的基本数据类型列表很相似。

Python实现双端队列参考:https://blog.csdn.net/weixin_43790276/article/details/104033394

使用Python实现双端队列时,使用了列表,可以用双端队列与 deque 对比,deque类中实现了很多方法,接下来介绍deque类的用法。

一、deque入队和出队

deque 类中实现了单个数据入队,将一个可迭代对象入队,将数据插入指定位置的方法。

1. 单个数据入队

# coding=utf-8
import collections


queue = collections.deque()
queue.append('a')
queue.append('b')
queue.append('c')
print(queue)
queue.appendleft('A')
queue.appendleft('B')
print(queue)

运行结果:

deque(['a', 'b', 'c'])
deque(['B', 'A', 'a', 'b', 'c'])

append(item),添加一个数据到队列的尾部。与列表的append()方法功能相似。

appendleft(item),添加一个数据到队列的头部。与append()的添加方向相反。

2. 可迭代对象入队

queue.extend(['D', 'E'])
queue.extendleft(['c', 'd'])
print(queue)

运行结果:

deque(['d', 'c', 'B', 'A', 'a', 'b', 'c', 'D', 'E'])

extend(iterable),将一个可迭代对象中的数据按顺序添加到队列的尾部。这里要注意,字符串也是可迭代对象,如直接添加字符串'ABC',会将'A'、'B'、'C'添加到队列中,因为'ABC'会被当成一个可迭代对象进行迭代,要将'ABC'作为一个整体的字符串添加可以将其放到列表中,添加['ABC']才会符合预期。

extendleft(iterable),将一个可迭代对象中的数据按顺序添加到队列的头部。

3. 指定位置插入数据

queue.insert(3, 'T')
print(queue)

运行结果:

deque(['d', 'c', 'B', 'T', 'A', 'a', 'b', 'c', 'D', 'E'])

insert(index, item),在队列中的指定位置插入一个数据,index为指定的位置索引。

deque 类中实现了队列两端的出队方法。

print(queue.pop())
print(queue.popleft())
print(queue)

运行结果:

E
d
deque(['c', 'B', 'T', 'A', 'a', 'b', 'c', 'D'])

pop(),将队列尾部的数据弹出,并作为返回值。

popleft(),将队列头部的数据弹出,并作为返回值。

二、deque的copy方法

queue_b = queue.copy()
print(queue)
print(queue_b)
print(id(queue))
print(id(queue_b))

运行结果:

deque(['c', 'B', 'T', 'A', 'a', 'b', 'c', 'D'])
deque(['c', 'B', 'T', 'A', 'a', 'b', 'c', 'D'])
2502045746056
2502045746992

copy(),拷贝队列。拷贝之后,对原队列进行操作,不会影响到拷贝出来的队列。这个方法要在高于Python3.5的版本才有。

三、deque返回指定值的数量和索引

print(queue.count('b'))
queue.append('b')
print(queue.count('b'))
print(queue.count('z'))
print(queue.index('T'))

运行结果:

1
2
0
2

count(item),返回队列中指定值的数量,如果值不存在则返回0。

index(item),返回队列中指定值的索引,如果值不存在则报错,如果有多个相同的数据则返回从左到右第一个值的索引。

四、deque的翻转和轮转

print(queue)
queue.reverse()
print(queue)
queue.rotate(3)
print(queue)

运行结果:

deque(['c', 'B', 'T', 'A', 'a', 'b', 'c', 'D', 'b'])
deque(['b', 'D', 'c', 'b', 'a', 'A', 'T', 'B', 'c'])
deque(['T', 'B', 'c', 'b', 'D', 'c', 'b', 'a', 'A'])

reverse(),将队列翻转。与列表的reverse()方法功能一样。

rotate(num),对队列中的数据进行轮转。每次轮转是将队尾的数据出队然后从队头入队,相当于先pop()再appendleft(item),retate(num)中传入轮转的次数。

五、deque的删除

print(queue)
queue.remove('T')
print(queue)
queue.clear()
print(queue)

运行结果:

deque(['T', 'B', 'c', 'b', 'D', 'c', 'b', 'a', 'A'])
deque(['B', 'c', 'b', 'D', 'c', 'b', 'a', 'A'])
deque([])

remove(item),从队列中删除指定的数据,如果指定的数据不存在则报错,如果有多个相同的数据则只会删除从左到右的第一个数据。

clear(),将队列清空。

六、deque指定队列的长度

que = collections.deque(maxlen=5)
que.extend(['a', 'b', 'c', 'd', 'e'])
print(que)
que.append('F')
print(que)
que.appendleft('A')
print(que)

运行结果:

deque(['a', 'b', 'c', 'd', 'e'], maxlen=5)
deque(['b', 'c', 'd', 'e', 'F'], maxlen=5)
deque(['A', 'b', 'c', 'd', 'e'], maxlen=5)

在实例化队列时,可以使用maxlen方法指定队列的长度。为了方便使用,deque类中用property将maxlen方法转换成了属性,并且deque类初始化时可将maxlen作为参数传入。

指定队列的长度后,如果队列已经达到最大长度,此时从队尾添加数据,则队头的数据会自动出队。队头的数据相等于被队尾新加的数据“挤”出了队列,以保证队列的长度不超过指定的最大长度。反之,从队头添加数据,则队尾的数据会自动出队。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python deque的用法介绍 的相关文章

  • C++ STL — 第6章 STL容器(二)deque

    C 43 43 STL容器deque和vector很类似 xff0c 也是采用动态数组来管理元素 使用deque之前需包含头文件 xff1a include lt deque gt 它是定义在命名空间std内的一个class templat
  • deque 迭代器失效的问题详解

    今天在看STL源码的时候 xff0c 无意写了如下的代码 xff0c 发现程序崩溃了 xff1a lt span style 61 34 font size 14px 34 gt deque lt int gt iterator iter
  • STL —— vector,list,deque,使用与优缺点比较

    关于vector list deque 已经做过介绍 xff0c 本文是对三种容器的优劣做出比较 下面是vector list deque的博客链接 vector list deque vector list对比 底层结构 动态顺序表 xf
  • Python实现桶排序

    Python实现桶排序 一 桶排序简介 桶排序 Bucket sort 是一种通过分桶和合并实现的排序算法 又被称为箱排序 桶排序先将数据分到有限数量的桶里 然后对每一个桶内的数据进行排序 桶内排序可以使用任何一种排序算法 如快速排序 最后
  • Python实现栈

    Python实现栈 关于栈的介绍 请参考 https blog csdn net weixin 43790276 article details 104033337 栈的数据存储结构可以是顺序表 也可以是链表 本篇使用 Python 来分别
  • 链表介绍

    链表介绍 链表与顺序表一样 也属于线性表 一个线性表是某类数据元素的一个集合 表里同时记录着元素之间的顺序关系 线性表的数据之间有顺序关系 顺序关系分为两种 一种是物理有序 即数据物理存储的位置顺序与数据之间的顺序关系一致 另一种是逻辑有序
  • Python实现归并排序

    Python实现归并排序 一 归并排序简介 归并排序 Merge Sort 是建立在归并操作上的一种效率很高的排序算法 比较占用内存 该算法是分治法 Divide and Conquer 的一个典型应用 归并排序将两个或两个以上 一般是两个
  • Python实现二叉搜索树的删除功能

    Python实现二叉搜索树的删除功能 二叉搜索树 二叉查找树 Binary Search Tree 又称为排序二叉树 有序二叉树 二叉搜索树的实现可以参考 https blog csdn net weixin 43790276 articl
  • Python 中的双端队列是如何实现的,它们什么时候比列表更糟糕?

    我最近开始研究如何在 Python 中实现各种数据结构 以便使我的代码更加高效 在研究列表和双端队列的工作原理时 我发现当我想要移位和取消移位时 可以将时间从列表中的 O n 减少到双端队列中的 O 1 列表被实现为固定长度数组 这些数组具
  • 为什么我应该使用 Deque 而不是 Stack?

    我需要一个Stack我的用例的数据结构 我应该能够将项目推送到数据结构中 并且我只想从堆栈中检索最后一个项目 这堆栈的 JavaDoc says 一组更完整且一致的 LIFO 堆栈操作是 由 Deque 接口及其实现提供 应该 优先使用此类
  • 如何从 std::deque 释放内存?

    我正在使用一个std deque存储相当大量的对象 如果我删除一堆这些对象 在我看来 它的内存使用量不会减少 与 std vector 类似 有办法减少吗 我知道在向量中你必须使用 交换技巧 我认为它在这里也适用 但我宁愿避免这种情况 因为
  • 分配新块时如何控制“std::deque”的块大小?

    当我们向a中插入一个新元素时std deque 如果现有的块都已满 它可能会分配一个新的块来包含该元素 然而 实现如何控制块大小呢 用户是否可以控制块大小 或者它仅取决于实现的选择 例如4K 还是 8K 这是实现的选定值 无法对其进行控制
  • python:双端队列与列表性能比较

    在 python 文档中 我可以看到 deque 是一个特殊的集合 针对从左侧或右侧弹出 添加项目进行了高度优化 例如 文档说 双端队列是堆栈和队列的概括 名称是 发音为 deck 是 双端队列 的缩写 德克斯 支持线程安全 内存高效的追加
  • 为什么ArrayDeque比LinkedList更好

    我试图理解为什么Java的ArrayDeque比Java的LinkedList更好因为它们都实现了 Deque 接口 我几乎没有看到有人在他们的代码中使用 ArrayDeque 如果有人更深入地了解 ArrayDeque 的实现方式 那将会
  • OpenCV - 如何将 Mat 推回到队列中?

    我正在尝试将视频帧放入双端队列中 这段代码不起作用 因为队列的后部和前部都与当前帧相同 deque
  • 为什么 STL 双端队列不作为循环向量实现?

    我一直认为在C 标准模板库 STL 中 双端队列 deque 是一个具有循环边界条件的大小可变数组 如向量 意味着有一个头指针i和一个尾指针j都指向数组的某个位置a 0 L 1 一个push front是i push back 是j pop
  • 时间复杂度:删除双端队列的元素

    删除一个元素的时间复杂度是多少collections deque E g deq collections deque 1 2 3 del deq 1 Summary 时间复杂度为 O n 其中 n 是到最近端点的距离 总尺寸为deque不要
  • 有没有办法获得 deque 的内部存储大小作为 vector::capacity ?

    据我了解 deque和vector都保留了一些增长空间 vector capacity 能够获取向量的内部保留空间 双端队列标准中没有这样的成员 有什么方法可以获取这些信息吗 您必须深入研究实现才能弄清楚这一点 的版本std dequegc
  • 跨多个进程使用双端队列对象

    我试图减少读取大约 100 000 个条目的数据库的处理时间 但我需要它们以特定的方式格式化 为了尝试做到这一点 我尝试使用 pythonmultiprocessing map函数工作完美 只是我似乎无法获得任何形式的队列引用来跨它们工作
  • deque如何具有摊余常数时间复杂度

    I read here https stackoverflow com questions 22306949 does deque provide o1 complexity when inserting on top从接受的答案来看 st

随机推荐

  • Linq语法详细

    1 简单的linq语法 1 var ss from r in db Am recProScheme select r 2 var ss1 db Am recProScheme 3 string sssql select from Am re
  • 不加电透明屏:在场景化应用中,有哪些特点和优点?

    不加电透明屏是一种新型的显示技术 它可以在不需要电源的情况下显示图像和文字 这种屏幕的原理是利用光的折射和反射来实现显示效果 而不需要通过电流来激发像素点 不加电透明屏的最大优点是节能环保 传统的显示屏需要消耗大量的电能来显示图像 而不加电
  • 环境搭建04-Ubuntu16.04更改conda,pip的镜像源

    我常用的pipy国内镜像源 https pypi tuna tsinghua edu cn simple 清华 http mirrors aliyun com pypi simple 阿里云 https pypi mirrors ustc
  • Java-基于SSM的药品销售管理系统

    项目背景 本论文主要论述了如何使用JAVA语言开发一个药品销售系统 本系统将严格按照软件开发流程进行各个阶段的工作 采用B S架构 面向对象编程思想进行项目开发 在引言中 作者将论述药品销售系统的当前背景以及系统开发的目的 后续章节将严格按
  • 【论文翻译】基于层次结构的动态异构图嵌入

    基于层次结构的动态异构图嵌入 Dynamic Heterogeneous Graph Embedding Using Hierarchical Attentions 百度学术 摘要 图嵌入已经引起了许多研究兴趣 现有的研究主要集中在静态同质
  • 2018.08.31 WorkSummary——05

    最近在做一个SMH spring springmvc hibernate 的项目 比较有意思 主要是在前端做大数据展示 后台业务较少 但是表特别多 一个图对应一个表 一共上百个图 hibernate是特点是操作对象等于操作数据库 每个表对应
  • React Native

    小手动一动 点赞转发加关注 微信搜索 大前端杂货铺 公众号关注大前端老司机带您遨游大前端知识的海洋 关注 Github https github com big frontend 还有大前端代码实践哦 java 与 javascript 互
  • C++基础——简单而强大的bitset

    basis bitset 的构造 bitset的操作 一些高级用法 将Bitsets视为一组标志 一些简单的原子操作 往往能组合出复杂而强大的功能 位操作的深远意义不在于表示一种数值 而是可能的情况数 我虽然暂时不知道bitset能组合出如
  • Python 之列表添加元素的3种方法

    一 追加单个值 append 方法 追加单个元素 gt gt gt list crazyit 20 2 gt gt gt list append fkit gt gt gt print list crazyit 20 2 fkit 二 追加
  • Configure and build Mesa3D

    1 环境 Mesa3D 21 1 4 Mesa3D demos Ubuntu 20 04 2 配置环境 sudo apt install gcc sudo apt install g sudo apt install vim sudo ap
  • React-Native ERROR: JAVA_HOME is not set and no ‘java’ command could be found in your PATH.

    ERROR JAVA HOME is not set and no java command could be found in your PATH Please set the JAVA HOME variable in your env
  • React重点知识拓展,含Hooks、路由懒加载等

    第7章 React扩展 一 setState 1 setState更新状态的2种写法 setState stateChange callback 对象式的setState stateChange为状态改变的对象 该对象可以体现出状态的更改
  • 华为云原生之数据仓库服务GaussDB(DWS)的深度使用与应用实践

    一 GaussDB DWS 简介 什么是 GaussDB DWS 数据仓库服务 GaussDB DWS 是一种基于华为云基础架构和平台的在线数据处理数据库 提供即开即用 可扩展且完全托管的分析型数据库服务 GaussDB DWS 是基于华为
  • java内存工具VisualVM的简单使用以及与Idea集成

    一 idea集成 1 打开设置 windows File gt Setting MacOS Intelij Idea gt Preferences 1 2 打开插件仓库 Plugins gt Browers Repositrories 在这
  • SPI总线协议概述

    一 概述 SPI serial peripheral interface 是一种同步串行通信协议 由一个主设备和一个或多个从设备组成 主设备启动与从设备的同步通信 从而完成数据的交换 SPI是一种高速全双工同步通信总线 标准的SPI仅仅使用
  • 【Python】一个矩阵根据某一列选择大于或小于范围的数据

    data all data all data all 3 gt 54201 data all data all data all 3 lt 54220 上面就是根据数据的第3列 选取54201到54220的范围的数据
  • AD20的元件库及加载(一)

    开始时我们画的是元器件 元器件在后缀名为 的文件里画 以画电容为例 上图就是结果 画着简单 过程能学会很多 小伙伴们可能刚刚接触 不知道在哪找线 选择元器件不放 按住鼠标左键 并按下空格 即可旋转元器件的角度 每次旋转90度 电阻的两边的四
  • 福到了(15 分)

    L1 6 福到了 15 分 福 字倒着贴 寓意 福到 不论到底算不算民俗 本题且请你编写程序 把各种汉字倒过来输出 这里要处理的每个汉字是由一个 N N 的网格组成的 网格中的元素或者为字符 或者为空格 而倒过来的汉字所用的字符由裁判指定
  • 软件测试基础内容学习(二)之边界值分析法

    对限定边界规则设计测试点 边界值分析法 说明 1 边界范围节点 2 应用设计步骤 3 案例 4 适用场景 边界范围节点 选取正好等于 上点 刚好大于 刚好小于 离点 边界的值作为测试数据 内点 一般取最中间的点 在范围内的点 应用设计步骤
  • Python deque的用法介绍

    Python deque的用法介绍 deque 是Python标准库 collections 中的一个类 实现了两端都可以操作的队列 相当于双端队列 与Python的基本数据类型列表很相似 Python实现双端队列参考 https blog