python中的deque模块(collections的deque模块)

article/2025/10/4 2:39:37

目录

1. deque是python的collections中的一个类

2.deque的简单使用以及它的方法

2.1 创建deque的方法

 2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

2.3  deque的 appendleft()方法

2.4 deque的 clear()方法

2.5 deque的 copy()方法

2.6 deque的count方法

2.7 deque中的extend()方法

2.8 deque中的extendleft()方法

2.9 deque中的index方法

2.10 deque中的insert方法

2.11 deque中的pop方法

2.12 deque中的popleft方法

2.13 deque中的remove方法

2.14 deque中的reverse方法

2.15 deque中的rotate方法


1. deque是python的collections中的一个类

deque的对象像是一个列表,只不过可以固定这个deque对象的大小,以及列表是在队列的两端执行添加和弹出元素的操作,可以理解为,deque是一个双向的队列,

尽管你也可以手动在一个列表上实现这一的操作(比如增加、删除等等)。但是这里的队列方案会更加优雅并且运行得更快些。

以下是部分源码,以及部分方法:

class deque(object):"""deque([iterable[, maxlen]]) --> deque objectA list-like sequence optimized for data accesses near its endpoints."""def append(self, *args, **kwargs): # real signature unknown""" Add an element to the right side of the deque. """passdef appendleft(self, *args, **kwargs): # real signature unknown""" Add an element to the left side of the deque. """passdef clear(self, *args, **kwargs): # real signature unknown""" Remove all elements from the deque. """passdef copy(self, *args, **kwargs): # real signature unknown""" Return a shallow copy of a deque. """passdef count(self, value): # real signature unknown; restored from __doc__""" D.count(value) -> integer -- return number of occurrences of value """return 0def extend(self, *args, **kwargs): # real signature unknown""" Extend the right side of the deque with elements from the iterable """passdef extendleft(self, *args, **kwargs): # real signature unknown""" Extend the left side of the deque with elements from the iterable """passdef index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__"""D.index(value, [start, [stop]]) -> integer -- return first index of value.Raises ValueError if the value is not present."""return 0def insert(self, index, p_object): # real signature unknown; restored from __doc__""" D.insert(index, object) -- insert object before index """passdef pop(self, *args, **kwargs): # real signature unknown""" Remove and return the rightmost element. """passdef popleft(self, *args, **kwargs): # real signature unknown""" Remove and return the leftmost element. """passdef remove(self, value): # real signature unknown; restored from __doc__""" D.remove(value) -- remove first occurrence of value. """passdef reverse(self): # real signature unknown; restored from __doc__""" D.reverse() -- reverse *IN PLACE* """passdef rotate(self, *args, **kwargs): # real signature unknown""" Rotate the deque n steps to the right (default n=1).  If n is negative, rotates left. """pass

2.deque的简单使用以及它的方法

2.1 创建deque的方法

可以创建一个空的deque,也可以创建带数据的deque,这个数据,我们通过源码看,必须是一个可迭代的对象接口,列表,元组等等。

from collections import deque# 创建一个空的deque
data = deque()
print(data)
print("=" * 60)
# 创建有数据的deque
data1 = deque('abcd')
print(data1)
print("=" * 60)
# 创建有数据的deque
data2 = deque([1, 2, 3, 4])
print(data2)
print("=" * 60)

 2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

from collections import deque# 创建一个空的deque, 并指定最大的元素是3个
data = deque(maxlen=3)
data.append(1)
data.append(2)
data.append(3)
print(data)
data.append(4)
print(data)

运行结果,我们可以看到,当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉

 

2.3  deque的 appendleft()方法

从deque队列的左侧添加数据,append()就是默认就尾部即右侧添加数据

from collections import dequedata = deque('123')
print(data)
print("=" * 60)
data.appendleft(0)
print(data)

运行结果

deque(['1', '2', '3'])
============================================================
deque([0, '1', '2', '3'])

2.4 deque的 clear()方法

清空deque队列,让其变成空队列

from collections import dequedata = deque('123')
print(data)
print("=" * 60)
data.clear()
print(data)

运行结果

deque(['1', '2', '3'])
============================================================
deque([])

2.5 deque的 copy()方法

deque的copy方法相当于深拷贝,拷贝后的地址不相同,并且原来的值修改后,不会影响拷贝后的值。

from collections import dequedata1 = deque('123')
print(data1)
print("=" * 60)
data2 = data1.copy()
print(data2)
print("地址比较")
print("data1的地址", id(data1))
print("data2的地址", id(data2))
print("修改数据后,看变化")
data1.append('4')
print(data1)
print("=" * 60)
print(data2)

运行结果:

deque(['1', '2', '3'])
============================================================
deque(['1', '2', '3'])
地址比较
data1的地址 2404465361192
data2的地址 2404465361304
修改数据后,看变化
deque(['1', '2', '3', '4'])
============================================================
deque(['1', '2', '3'])

2.6 deque的count方法

count(value),获取deque队列中某个元素的个数

from collections import dequedata1 = deque('123333333')
print(data1)
print("=" * 60)
count = data1.count('3')
print(count)

运行结果:

deque(['1', '2', '3', '3', '3', '3', '3', '3', '3'])
============================================================
7

2.7 deque中的extend()方法

两个队列合并,extend(value),  value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

from collections import dequedata1 = deque('123')
data2 = deque('456')
data1.extend(data2)
print(data1)

运行结果

deque(['1', '2', '3', '4', '5', '6'])

2.8 deque中的extendleft()方法

两个队列合并,从左侧合并,extendleft(value),  value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

要注意。合并时候,value的值,也是反着来的,注意看下面的打印,从左侧开始往里面加

from collections import dequedata1 = deque('123')
data1.extendleft('456')
print(data1)

运行结果:

deque(['6', '5', '4', '1', '2', '3'])

2.9 deque中的index方法

index(value,start=None,end=None),  怎么使用请看代码

from collections import dequedata1 = deque('helloword')
print(data1.index('o'))     # 有多个的话,取第一个的索引位置
print(data1.index('o', 5))  # 从第五个开始(索引从0开始)
print(data1.index('o', 5, 8))  # 从第五个开始 -- 第八个结束

运行结果:

4
6
6

2.10 deque中的insert方法

insert(index,value), 在index位置上,插入value值,   注意顺序

from collections import dequedata1 = deque('helloword')
data1.insert(0, '1')    # 在第一个位置上插入 1
data1.insert(0, '2')    # 在第一个位置上插入 2
data1.insert(0, ['123'])    # 在第一个位置上插入 列表123print(data1)

运行结果:

deque([['123'], '2', '1', 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd'])

2.11 deque中的pop方法

pop() 方法弹出元素,从尾部弹出,并且返回弹出的这个元素

from collections import dequedata1 = deque('12345')
print(data1.pop())  # 弹出元素,从右侧即末尾弹出,并返回
print(data1.pop())  # 弹出元素,从右侧即末尾弹出,并返回
print(data1)

2.12 deque中的popleft方法

popleft() 方法弹出元素,从头部弹出,并且返回弹出的这个元素

在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元 素的时间复杂度为 O(N) 。

from collections import dequedata1 = deque('12345')
print(data1.popleft())  # 弹出元素,从左侧侧即头部弹出,并返回
print(data1.popleft())  # 弹出元素,从左侧侧即头部弹出,并返回
print(data1)

2.13 deque中的remove方法

remove(value)方法,将deque队列某个元素进行移除

from collections import dequedata1 = deque('12345')
data1.remove('1')
print(data1)

2.14 deque中的reverse方法

reverse()方法,将deque队列进行反转

from collections import dequedata1 = deque('12345')
data1.reverse()
print(data1)
deque(['5', '4', '3', '2', '1'])Process finished with exit code 0

2.15 deque中的rotate方法

rotate(n)   ,  将队列 向右旋转n步(默认n=1)。如果n为负,则向左旋转。

from collections import dequedata1 = deque('12345')
data1.rotate(3)
print(data1)
data1.rotate(-3)
print(data1)
deque(['3', '4', '5', '1', '2'])
deque(['1', '2', '3', '4', '5'])


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

相关文章

C++中deque的用法(超详细,入门必看)

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页:陈童学哦 所属专栏:CSTL 如果本文对你有所帮助的话,希望可以点赞👍收藏📂支持一下哦! 期待…

Java数据结构之Deque

Java数据结构之Deque 引题Deque接口分析Deque的注释与Queue的联系还在使用Stack?你OUT啦!peek方法更方便与List的不同与null说goodbye 子类ArrayDeque.class分析基本结构官方的代码图解数据存储过程 简单思考 1部分代码的分析关于初始容量关于扩容代码中…

java关于Deque的使用

定义 双向队列:支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈(stack)。 和Queue的区别 Deque是double ended queue,将其理解成双端结束的队列,双端队列,可以在首尾插入或删除元素。 Queue的…

【C++】deque的用法

目录 一、容器适配器二、deque的介绍三、deque的使用及缺陷1、deque的构造函数2、deque的元素访问接口3、deque的 iterator的使用4、deque的增删查改4、deque的缺陷5、为什么选择deque作为stack和queue的底层默认容器 一、容器适配器 在了解deque前,我们先讲一讲什…

Python deque的用法介绍

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

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;我找到一个…