Python collections模块之deque()详解

Python deque的用法介绍 阅读详情
AI摘要

本文详细介绍了Python collections模块中的deque数据结构,包括其基本操作如append、appendleft、extend、extendleft等,以及高级特性如rotate、maxlen。通过实例展示了deque在高效插入和删除元素方面的优势。

collections模块 ==> Python标准库,数据结构常用的模块;collections包含了一些特殊的容器,针对Python内置的容器,例如list、dict、set和tuple,提供了另一种选择。

collections模块常用类型有:

  • 双向队列(deque)
    类似于list的容器,可以快速的在队列头部和尾部添加、删除元素
    请点击deque

  • 计数器(Counter)
    dict的子类,计算可hash的对象
    请点击Counter

  • 默认字典(defaultdict)
    dict的子类,可以调用提供默认值的函数
    请点击defaultdict

  • 有序字典(OrderedDict)
    dict的子类,可以记住元素的添加顺序

  • 可命名元组(namedtuple)
    可以创建包含名称的tuple

deque()

deque是栈和队列的一种广义实现,deque是"double-end queue"的简称;deque支持线程安全、有效内存地以近似O(1)的性能在deque的两端插入和删除元素,尽管list也支持相似的操作,但是它主要在固定长度操作上的优化,从而在pop(0)和insert(0,v)(会改变数据的位置和大小)上有O(n)的时间复杂度。

常用方法:

append()

从右端添加元素(与list同)

st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.append(4)
dlist1.append("k")
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', 4])
#deque([0, 1, 2, 3, 'k'])

appendleft()

从左端添加元素

st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.appendleft(4)
dlist1.appendleft("k")
print(dst)
print(dlist1)
#结果:
#deque([4, 'a', 'b', 'c', 'd'])
#deque(['k', 0, 1, 2, 3])

extend()

从右端逐个添加可迭代对象(与list同)
Python中的可迭代对象有:列表、元组、字典、字符串

from collections import deque
ex = (1, "h", 3)
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', 1, 'h', 3])
#deque([0, 1, 2, 3, 1, 'h', 3])

extendleft()

从左端逐个添加可迭代对象
Python中的可迭代对象有:列表、元组、字典、字符串

from collections import deque

ex = [("a", 1), 3]
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#结果:
#deque(['a', 'b', 'c', 'd', ('a', 1), 3])
#deque([0, 1, 2, 3, ('a', 1), 3])

pop()

移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError

from collections import deque
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
p = dst.pop()
p1 = dlist1.pop()
print(p)
print(p1)
print(dst)
print(dlist1)
#结果:
#d
#3
#deque(['a', 'b', 'c'])
#deque([0, 1, 2])

popleft()

移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError

from collections import deque
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
p = dst.popleft()
p1 = dlist1.popleft()
print(p)
print(p1)
print(dst)
print(dlist1)
#结果:
#a
#0
#deque(['b', 'c', 'd'])
#deque([1, 2, 3])

count()

统计队列中的元素个数(与list同)

from collections import deque

st = "abbcd"
dst = deque(st)
p = dst.count("b")
print(dst)
print(p)
#结果:
#deque(['a', 'b', 'b', 'c', 'd'])
#2

insert(index,obj)

在指定位置插入元素(与list同)

from collections import deque

st = "abbcd"
dst = deque(st)
dst.insert(0, "chl")
print(dst)
#结果:
#deque(['chl', 'a', 'b', 'b', 'c', 'd'])

rotate(n)

rotate(n), 从右侧反转n步,如果n为负数,则从左侧反转。
d.rotate(1) 等于 d.appendleft(d.pop())

from collections import deque

st = "abbcd"
dst = deque(st)
dst.rotate(1)
print(dst)
#结果:
#deque(['d', 'a', 'b', 'b', 'c'])

clear()

将deque中的元素全部删除,最后长度为0

from collections import deque

st = "abbcd"
dst = deque(st)
dst.clear()
print(dst)
#结果:
#deque([])

remove()

移除第一次出现的元素,如果没有找到,报出ValueError

from collections import deque

st = "abbcd"
dst = deque(st)
dst.remove("a")
print(dst)
dst.remove("f")
#结果:
#deque(['b', 'b', 'c', 'd'])
#ValueError: deque.remove(x): x not in deque

maxlen

只读的属性,deque限定的最大长度,如果无,就返回None。
当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除。

from collections import deque

dst = deque(maxlen=2)
dst.append(1)
dst.append(2)
print(dst)
dst.append(3)
print(dst)
print(dst.maxlen)
#结果:
#deque([1, 2], maxlen=2)
#deque([2, 3], maxlen=2)
#2

此外,deque还支持迭代、序列化、len(d)、reversed(d)、copy.copy(d)、copy.deepcopy(d),通过in操作符进行成员测试和下标索引。

【Python】 Collections Deque ,通常被称作“双端队列”(double-ended queue),是Python标准库中 模块提供的一个高性能数据结构。它不仅仅是普通队列的实现,其独特之处在于能够高效地在队列的两端(头部和尾部)进行元素的添加和删除操作。相较于Python内置的 类型, 在处理队列和栈这类需要频繁在两端操作的场景时,展现出卓越的性能优势。 在头部进行插入 () 或删除 () 时,由于需要移动后续所有元素,其时间复杂度为 (O(n)),这在处理大量数据时会导致显著的性能瓶颈。而 的设计目标正是为了解决这一痛点,使得在两 阅读详情

相关推荐

一步一步学python之(23)队列-deque双端队列

Python队列操作指南:介绍了队列的基本概念和Python中实现队列的多种方式。文章首先讲解使用列表模拟队列的操作方法,包括创建、入队、出队等基本操作。重点介绍了collections模块中的deque双端队列,详细说明其创建方法、添加/移除元素、查找元素、扩展队列、旋转队列和清空队列等操作,并提供了丰富的代码示例和运行结果。文章强调在Python中使用专门的队列模块比单纯使用列表更高效,尤其适合多线程环境。

1504

Python:【基础语法】 deque()用法

Python:【基础语法】 deque()用法

张齐贤的博客 1万+

python双向队列deque

mul __(),和 __ imul __() 操作。Deque从版本3.5开始支持 __ add。

flyingluohaipeng的博客 1682

【Python】详解 collections.deque

一、绪论 collections 作为 Python 的内建集合模块,实现了许多十分高效的特殊容器数据类型,即除了 Python 通用内置容器: dict、list、set 和 tuple 等的替代方案。在IDLE 输入 help(collections) 可查看帮助文档,其中常见的类/函数如下: 名称 功能 namedtuple 用于创建具有命名字段的 tuple 子...

闻韶 1万+

NeRF必读:Mip-NeRF总结与公式推导

由于远景近景的分辨率不同,导致经典NeRF对于多尺度场景的表达存在明显瑕疵:NeRF对于近景的重建比较模糊而对于远景的重建出现锯齿。简单粗暴的策略是supersampling,但是费时费力。相较于NeRF使用的位置编码(PE)方式,Mip-NeRF提出了积分位置编码的方式(IPE).这种编码方式可以多尺度地描述空间中的信息分布,make sense.

i_head_no_back的博客 6078

python中的deque详解

deque(双端队列)是Python标准库模块中的一个类,它支持从两端快速添加和删除元素。deque为固定大小或者可变大小的队列提供了线程安全的实现,并且它比使用列表(list)来实现相同的功能更为高效。dequedequedequemaxlendequedeque下面是deque。

AI浩 1万+

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 324

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

insert(index,value), 在index位置上,插入value值, 注意顺序。rotate(n) , 将队列 向右旋转n步(默认n=1)。如果n为负,则向左旋转。index(value,start=None,end=None), 怎么使用请看代码。popleft() 方法弹出元素,从头部弹出,并且返回弹出的这个元素。pop() 方法弹出元素,从尾部弹出,并且返回弹出的这个元素。运行结果,我们可以看到,

Mogul的博客 1万+

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8267

python模块collections中namedtuple() 以及 deque 的理解

deque collections 是 python 内建的一个集合模块,里面封装了许多集合类,其中队列相关的集合只有一个:deque。 deque 是双边队列(double-ended queue),具有队列和栈的性质,在 list 的基础上增加了移动、旋转和增删等。 deque 是一个双端队列, 如果要经常从两端append 的数据, 选择这个数据结构就比较好了, 如果要实现随机访问,不建议用这个,请用列表. deque 优势就是可以从两边append ,appendleft 数据. 这一点list 是

wangwang的博客 438

基于51单片机的通讯聊天系统

通过编写51单片机通讯聊天程序,掌握51单片机的各个模块的知识点和运用C语言编写51单片机的能力。用51单片机与口袋开发板设计实现一个单片机与电脑串口助手实现通讯功能的程序。程序的主要功能如下: 1 OLED初始化显示Welcome to Bluetooth communication! 字符串。 2 程序开始时处于接收信息模式, 电脑串口助手发送信息时,将从初始化字符第一个开始显示,电脑串口助手发送信息后,蜂鸣器响铃2秒左右。 3 每次同时按下左右键时,可以轮流切换接收/发送信息模式 4 在发送信息模式时

m0_47419053的博客 3638

一文看懂Python collections模块的高效数据类型

原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改。Python的最大优势之一是其广泛的模块和软件包。这将Python的功能扩展到许多受欢...

大江狗 2688

Arm Neoverse CMN-700 QoS与PrefetchTarget架构解析

在现代多核处理器系统中,内存访问性能优化是提升整体效能的关键。QoS(服务质量)技术通过优先级调控机制,确保关键任务获得更高的缓存带宽和内存访问权限。PrefetchTarget作为预取技术的一种实现,能够显著降低内存访问延迟,特别适用于AI训练和数据库系统等高性能计算场景。Arm Neoverse CMN-700通过RN SAM模块实现了硬件级的地址范围检测和优先级调控,支持最多8个独立内存区域的QoS配置。测试数据显示,合理配置QoS可使关键任务延迟降低40%,而PrefetchTarget技术则能减少

weixin_36197669的博客 314

【云原生技术】sonar的官方web接口,获取质量阀结果的接口

以下是一个示例思路,说明如何调用 SonarQube 的质量阀查询接口并在前端展示“哪些条件没过”。假设前端使用 AJAX 或 fetch 从后端接口拿到 SonarQube 返回的 JSON(或直接前端请求 SonarQube API),前端再把解析结果展示给用户。测试覆盖率 (Coverage) 当前仅有 60%,未满足最低 80% 的要求,需要补充测试或优化以提升覆盖率。接口),就会返回相应的质量阀状态信息;里使用它来查询当前质量阀(质量门)的状态。,你用它即可获取该次分析的质量阀状态。

weixin_46453070的博客 1278

Python的collections库之deque

Python的collections库之deque() 我在上一篇文章BFS里使用了Python的collections.deque(),今天我来具体介绍一下这个队列,以及为什么使用它更好。 首先,collections模块提供了Python标准内建容器 dict、list、set、tuple 的替代选择。此模块相较于传统Python的容器,都有一定优点。今天我先来介绍其中的队列----deque。 collections.deque()队列支持线程安全,对于从两端添加(append)或者弹出(pop),复

weixin_44162334的博客 597

GIS数据处理-使用PostGIS+QGIS

GIS数据处理1-使用PostGIS+QGIS 介绍 这里我遇到了一个需求,需要将SQLite的.db数据库中GIS数据导出成shapefile文件 数据库的表结构如下所示,这里存储的是wkt格式的矢量数据 WKT与WKB格式介绍 OpenGIS 规范定义了两种表示空间对象的标准方式:Well-Know Text (WKT) 形式和Well-Known Binary(WKB) 形式。WKT 和 WKB 都包含矢量几何要素的对象类型和构成对象的坐标的信息。WKT可读性强,更方便阅读识别,而在实际数据传输和存

孙霸天的专栏 2528

多模块顺序_一文看懂Python collections模块的高效数据类型

原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改。Python的最大优势之一是其广泛的模块和软件包。这将Python的功能扩展到许多受欢迎的领域,包括机器学习、数据科学和Web开发等, 其中最好的模块之一是Python的内置collections 模块。一般来讲,python的collections是用于存储数据集合(比如列表list, ...

weixin_42301816的博客 93

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python collections模块

collections模块 : Python标准库,数据结构常用的模块;collections包含了一些特殊的容器,针对Python内置的容器,例如list、dict、set和tuple。 list:[] 更新列表:append 访问列表的元素:list[0] 删除列表中的元素:del list[2] 列表长度:len() dict:d = {key1 : value1, key2 : value2 }键值对之间用逗号分割 访问字典里的值:把相应的键放入熟悉的方括弧 d[key1] 修改字典:d[key.

qq_38022469的博客 1300

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

collections.deque双边队列

队列是一种只允许在一端插入在另一端删除的线性表。 collections.deque deque是双端队列(double ended queue)的缩写,由于两端都能编辑,deque既可以用来实现栈(stack)也可以用来实现队列(queue)。 pop()从右侧弹出数字 popleft()从左侧弹出数字 ...

养猪的纺织工 364

python--双端队列deque

import collections tmp = collections.deque() tmp.appendleft(1) # appendleft()左边插入 tmp.appendleft(2) tmp.appendleft(3) tmp.append(4) # append() 右边(尾部)插入 tmp.append(5) tmp.append(6) print(tmp) # deque([3, 2, 1, 4, 5, 6]) print(list(tmp)) # [3, 2, 1, 4,

Silentli20的博客 663

python读取txt到deque_[译]Python - deque双端队列

class collections.deque([iterable[, maxlen]])Deque 双端队列介绍初始化时,传入一个可迭代的数据,将返回一个从左到右的新的deque对象(可以理解为使用append()来遍历并添加数据中的元素到队列右端)。如果没有指定一个初始值,则生成一个长度为0的deque。双端队列(Deque)是堆栈和队列的一般化(读音是“deck”,是“double-end ...

weixin_39602579的博客 253

Python高阶部分扩展 (collections ,itertools)

Python高阶部分扩展 (collections ,itertools) python3 collections扩展 可命名元组 :namedtuple from collections import namedtuple stock_namedtuple = nametuple('sto...

chouzong1708的博客 250

用装饰器来检查deque与list在插入元素与弹出元素方面的效能优势

在python的collections模块中有一个deque的数据结构,它与list类似,具有append()和pop()方法,除此以外,还添加了leftappend()和leftpop()的方法,其运行模型与队列和栈类似,它的好处在与面对大数据量的时候,插入和取出的速度要更快,为了比较直观的感受这种差别,我写了一个简单的装饰器来检查它们在这两方面的差别,装饰器如下 def time_coun...

qq_35696312的博客 236
上一篇: Python实现 —— 十进制转二进制、八进制、 十六进制
下一篇: 使用cmd命令行查看Windows系统激活信息
chl183
博客等级 码龄9年 51粉丝 63原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值