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 collectionsqueue = 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作为参数传入。

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

Python deque的用法介绍相关推荐

  1. python 元组是什么_python元组是什么?python元组的用法介绍

    本篇文章给大家带来的内容是关于python元组是什么?python元组的用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 元组是什么? 你可以把它看作是只读的列表,因为元组不可 ...

  2. python元组有啥用_python元组是什么?python元组的用法介绍

    本篇文章给大家带来的内容是关于python元组是什么?python元组的用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 元组是什么? 你可以把它看作是只读的列表,因为元组不可 ...

  3. python的xpath用法介绍_python爬虫之xpath的基本使用详解

    本篇文章主要介绍了python爬虫之xpath的基本使用详解,现在分享给大家,也给大家做个参考.一起过来看看吧 一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XM ...

  4. [C++STL]deque容器用法介绍

    代码如下: #include <iostream> #include <string> #include <deque> using namespace std;v ...

  5. 简单介绍Python中异常处理用法

    这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下 为了保证程 ...

  6. python数组用sum求和_对python中array.sum(axis=?)的用法介绍

    根据代码中运行的结果来看,主要由以下几种: 1. sum():将array中每个元素相加的结果 2. axis对应的是维度的相加. 比如: 1.axis=0时,对饮搞得是第一个维度元素的相加, [[0 ...

  7. python线程创建对象_Python线程下thread对象的用法介绍(附实例)

    本篇文章给大家带来的内容是关于Python线程下thread对象的用法介绍(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Thread对象 Thread类用于表示单独的控制 ...

  8. python自动化_python自动化测试-Behave框架的用法介绍 - python测试学习

    测码学院  Behave框架的用法介绍 众所周知:行为驱动开发((behavior-drivendevelopment,BDD)是一种基于敏捷软件开发的方法.它可以鼓励开发人员,业务参与者和QA人员之 ...

  9. Python Pillow(PIL)库的用法介绍(二)

    Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...

最新文章

  1. 不要怂,就是GAN (生成式对抗网络) (六):Wasserstein GAN(WGAN) TensorFlow 代码
  2. (004) java后台开发之Eclipse(Neon) 版本安装Java EE插件
  3. 自学python爬虫要多久-初学Python爬虫要学多久?原来这么快
  4. matlab 小波滤波器系数导出函数,小波基函数和滤波系数.ppt
  5. [爬虫][python][入门][网页源码][百度图片][豆瓣TOP250]
  6. [UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
  7. import java.awt.BorderLayout;_Swing-布局管理器之BorderLayout(边界布局)-入门
  8. C# WinForm开发系列 - GDI+【转】
  9. linux磁盘fio压力测试,fio进行磁盘压力测试
  10. 区间数值计数(洛谷P1980题题解,Java语言描述)
  11. Linux中buff-cache占用过高解决方案
  12. MybatisX代码自动生成
  13. 听听各位对Ubuntu的UI的看法
  14. matlab画折现_用matlab画折线图
  15. 黑科技知识:需要登录才能访问的网站如何破解?仅仅只需 3 步!
  16. 51单片机入门——LED灯
  17. 多屏幕多分辨率的支持和一些概念
  18. 随机码生成器[10位字母+数字]
  19. 青岛租房 不知道租哪儿,手动做的租房地图。
  20. 好看的css 显示 php,HTML+CSS实现好看的三角形提示框样式

热门文章

  1. eclipse黑色主题
  2. 专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪?
  3. Codeforces D - High Load
  4. 用python做测试实现高性能测试工具(4)—系统架构
  5. Request 部分功能
  6. 《HTML5移动应用开发入门经典》—— 1.6 编写移动网站
  7. ibatis+Castle.MCV 版 NPetshop3
  8. 一个flash网页图片播放器
  9. CSS性能优化:可以试一试内联CSS?
  10. Spring RabbitMQ教程