Python deque的用法介绍

article/2025/10/4 3:31:48

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

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

 

 


http://chatgpt.dhexx.cn/article/JBbOsqJ5.shtml

相关文章

C++ deque的用法与示例

C deque的用法与示例 deque容器的介绍 Vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector 容器也可以在头尾两端插入元…

deque用法详解

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” deque函数: …

deque容器详解

文章目录 1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque插入和删除6. deque数据存取7. deque排序 1. deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部…

双端队列(Deque)

一、简介 deque&#xff0c;即双端队列(double ended queue)&#xff0c;是一种可以在两端扩展或收缩的序列化容器。 deque是C 标准模板库的一部分&#xff0c;想要使用deque&#xff0c;需要在程序中包含头文件deque。 #include<deque>二、定义和初始化 1.格式&#x…

关于Deque的详解

1. 定义 双向队列&#xff1a;支持插入删除元素的线性集合&#xff1b;java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 2. 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除…

deque用法深度解析,一篇文章弄懂deque容器各种操作

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2022/01/11&#x1f4c5; 最近更新时间&#xff1a;2022/01/11&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

未禁用nouveau导致Ubuntu安装Cuda的runfile安装方法出错:[ERROR]: Install of 455.32.00 failed, quitting

很多朋友在给Ubuntu&#xff08;Linux&#xff09;安装Cuda时&#xff0c;参考官方安装步骤导致安装出错&#xff1a; wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run sudo sh cuda_11.1.1_455.32.00_lin…

Ubuntu 安装 NVIDIA 显卡驱动详细步骤(ERROR: The Nouveau kernel driver is currently in use by your system)

1. 禁用 Nouveau 驱动 在禁用 Nouveau 驱动前我们先了解下它是啥&#xff1f;有什么作用。 Nouveau 是由第三方为 NVIDIA 显卡开发的一个开源 3D 驱动&#xff0c;也没能得到 NVIDIA 的认可与支持。虽然 Nouveau Gallium3D 在游戏速度上还远远无法和 NVIDIA 官方私有驱动相提…

Ubuntu 18.04 安装 nvidia 显卡驱动 离线安装 禁用 nouveau

Ubuntu 18.04 安装 nvidia 显卡驱动 离线安装 1 系统2 查看显卡2.1 更新 pci.ids 文件 3 安装显卡驱动 510.543.1 安装 nvtop 4 禁用 nouveau5 安装 cuda 11.6.15.1 设置环境变量 1 系统 # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description:…

[Ubuntu]:禁用nouveau、安装卸载NVIDIA CUDA及驱动(深度学习)

这里只针对Ubuntu的安装卸载&#xff0c;安装驱动方式的不同&#xff0c;卸载也有些许不同。通常有3种方式&#xff1a; 通过apt包管理工具来安装&#xff0c; 这样的方式好处是卸载安装的管理跟其他软件一致 通过.deb包来安装&#xff0c;这里就跳过apt&#xff0c;直接使用了…

ubuntu18.04 禁用自带nouveau后重启无法进入系统

问题 按照链接步骤&#xff1a;禁用ubuntu 自带显卡驱动Nouveau&#xff0c; 又按照推荐安装驱动&#xff1a;$ sudo ubuntu-drivers autoinstall&#xff0c;重启电脑后&#xff0c;无法进入系统&#xff0c;一直重复停留在密码输入界面。 解决方法&#xff1a; 开机进入ubun…

Ubuntu20.04(18.04通用)禁用nouveau,安装NVIDIA显卡驱动

卸载其它版本NVIDIA驱动 sudo apt-get --purge remove nvidia*sudo apt autoremove禁掉nouveau 打开文本形式 sudo gedit /etc/modprobe.d/blacklist.conf 或直接终端打开形式 sudo vim /etc/modprobe.d/blacklist.conf sudo vi /etc/modprobe.d/blacklist.conf 在打开的文件…

已解决:ubuntu18.4禁用nouveau驱动(如何关闭secure boot)

在安装显卡驱动等过程中往往会需要禁用bios中的secure boot&#xff0c;因为secure boot会阻止第三方源安装驱动&#xff0c;只要保证安装源可靠&#xff0c;禁用并不会带来多大隐患。 1.开机在未亮屏之前反复按F2进入设置界面 2.取消勾选后退出重启 完成bios中的secure boot禁…

Ubuntu18.04禁用nouveau驱动,安装NVIDIA显卡驱动。

一、关闭secure boot&#xff0c;禁用nouveau驱动。 1.禁用bios中的secure boot&#xff0c;因为secure boot会阻止第三方源安装的驱动&#xff0c;禁用不会带来多大隐患。 2.禁用nouveau驱动&#xff0c;这是Ubuntu默认的开源显卡驱动&#xff0c;与N卡驱动一起使用会导致兼…

openEuler操作系统禁用 Nouveau

目录 一、什么是openEuler 二、什么是Nouveau 三、禁用Nouveau Liunx系统安装NVIDIA显卡驱动时需要禁用Nouveau&#xff0c;openEuler操作系统也不例外&#xff0c;但是网上openEuler操作系统如何禁用Nouveau的资料比较少&#xff0c;而且基本都不靠谱&#xff0c;我找到一个…

LWN:NVIDIA 与 nouveau!

关注了就能看到更多这么棒的文章哦&#xff5e; NVIDIA and nouveau By Jake EdgeOctober 5, 2022LPCDeepL assisted translationhttps://lwn.net/Articles/910343/ 英伟达图形加速硬件的源代码发不了&#xff0c;对人们来说这也许是一个惊喜&#xff1b;至少快速浏览下来&…

干掉Nouveau安装Linux Nvidia显卡驱动

干掉Nouveau安装Linux Nvidia显卡驱动 首先说明下什么是Nouveau&#xff0c;为什么有些系统安装N卡驱动的时候会提示“ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver……”之类的错误。 Nouvea…

centos7篇---禁用默认的驱动nouveau,安装cuda和cudnn

禁用默认的驱动nouveau&#xff0c;安装cuda和cudnn 硬件设施&#xff1a;1. 禁用默认的驱动nouveau2. 系统要求3. 软件更新4. 安装驱动5. 安装cuda6. 安装cudnn参考 硬件设施&#xff1a; centos7 NVidia显卡驱动&#xff1a;470.57 CUDA: 11.4.2 cuDNN: 8.2.4 1. 禁用默认…

ubuntu系统禁用自带Nouveau驱动

Nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动&#xff0c;让Linux更容易的应对各种复杂的NVIDIA显卡环境&#xff0c;安装完Linux系统即可进入桌面并且有不错的显示效果&#xff0c;所以&#xff0c;很多Linux发行版默认集成了Nouveau驱动&#xff0c;在使用NVIDIA显卡时…

Ubuntu20.04 系统禁用自带的Nouveau驱动

注&#xff1a;该博文所述的方法同样适用于Ubuntu16.04、Ubuntu18.04版本系统。 nouveau(英语&#xff1a;/nuːˈvoʊ/) 是一个自由开放源代码GPU驱动程序&#xff0c;是为Nvidia的GPU所编写&#xff0c;也可用于属于系统芯片的高通系列&#xff0c;此驱动程序是由一群独立的…