python deque vs Queue vs list

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情


今天有个哥们问我点东西,是分析数据的时候,会把感兴趣的数据存入到队列里面,同时有多个线程针对数据进行操作,有些数据会往前插入,他现在的问题是后时候堵塞在insert动作。 我推荐他用deque。今天宅了一天,写了个hadoop pig的脚本,可以很容易的得出以前需要手写mapreduce的结果集合。 虽然pig的语法看起来简单,但是他毕竟是个新语法, 文档也不是太丰富 。这两天我再出个pig的简易教程,让大家也享受下pig(猪)的乐趣。O(∩_∩)O~

不扯了,话说 双端队列(deque)是一种支持向两端高效地插入数据、支持随机访问的容器。


其内部实现原理如下:

双端队列的数据被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外容器还需要维护一个存放这些数组首地址的索引数组 ,简单的理解,你可以想成一个大的array,分拆成几段,然后主要维护一个索引表。 大家看了下面的图应该就理解了。 



deque的语法很是简单,一看就懂,只是rorate乍一看搞不明白。 


deque有些不错的方法,用起来挺实用的,最少对我来说,是有用的。 

[指定大小,像queue]

[可以快速的做数据切割]


记得以前做统计的时候,有个api做接受数据,然后存入队列里面。当时也没用redis,毕竟有网络io的效果,就用deque来搞的。 16个线程,一块做的调度,怕会出现数据安全的问题,经过测试。 在多线程下,deque双端队列是安全的,大家可以放心搞。 

这个文章的原文是在 http://blog.xiaorui.cc ,我的文章总是被爬来爬去的。

下面是一个deque 、queue、list的性能对比,如果只是单纯的任务队列的话,又不太涉及对比,是否存在,remove的动作,那用deque再适合不过了。  


结果和我想的一样,deque很快,Queue也算可以,但是Queue只能做put,put的方向是不能指定的。list单纯的append算是不错的,但是如果你的应用有那种优先级的逻辑,那这样的话,你需要往前插入,用insert(0,item) 。 insert这个把item值插入到第0位,但是后面的那堆索引值,都要+1的。  这个负担可不小呀。  

Deque的缺点就是remove还有判断获取索引的时候,速度有些慢, 因为他需要执行多遍deque相关联的数据块 。不像list那样,搞一遍就行。 


Python collections模块核心组件详解:defaultdict、Counter、namedtuple、deque实战指南 Python collections模块提供了一组高效、语义清晰的容器类型,是对内置list和dict的重要增强。其设计基于数据结构原理,通过封装常见操作模式(如缺省值处理、频次统计、命名元组、双端队列)显著提升代码可读性运行效率。技术价值体现在减少样板代码、规避KeyError、优化时间复杂度(如deque的O(1)首尾操作)及强化类型契约(如namedtuple不可变性)。典型应用场景覆盖日志分析(Counter+defaultdict联动)、配置管理(namedtuple序列化)、实时流处理(deq 阅读详情

相关推荐

python队列

性能:从上往下依次变好,其中dequeQueue快10倍以上。

Nevadas的博客 306

Pythpn 数据结构 —— queuedeque

1. queue 队列是一个先进先出 FIFO 的数据结构,有以下方法: q.enque() # 入队列 q.deque() # 出队列 q.size() q.isEmpty() 在 DataStructures 目录下创建 Queue.py 文件,使用 list 构建 queue: class Queue: def __init__(self): self.items = [] def enqueue(self, item): self.items.insert(0, item) d

我有两颗糖 648

PYTHON 中的QUEUE, DEQUE

queue是多线程中的使用的栈,.deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

重剑无锋博客 443

数据结构算法——5. 线性结构之队列(Queue双端队列(Deque

文章目录一、队列(Queue)1. 队列的定义2. 队列的特性3. 使用python实现队列二、队列的应用:打印任务1. 实例2. 抽象建模3. python代码实现三、双端队列(Deque)1. 双端队列的定义2 .使用Python实现双端队列四、双端队列的应用:“回文词”判定1. “回文词”的概念2. “ 回文词”的判定方法3. python代码实现 一、队列(Queue) 1. 队列的定义 队列是一种有次序的数据集合,其特征是新数据项的添加总发生在一端(通常称为“尾rear”端)而现存数据项的移除总

花城的博客 1691

Python 操作数据结构队列 queue和 双端队列 deque

”"队列(Queue)和双端队列(Deque, Double-ended Queue)都是线性数据结构,但它们在操作上有所不同:队列(Queue):队列遵循先进先出(FIFO, First-In-First-Out)原则。元素只能从队尾添加(enqueue),并从队头移除(dequeue)。标准的队列不允许直接访问或修改队列中间的元素。Python标准库中的queue模块提供了不同类型的队列实现,如Queue、LifoQueue(后进先出)、PriorityQueue(优先级队列)等。

AdleyTales的技术博客 993

python数据结构之链表_Python 数据结构 —— 链表及其应用

list 的局限Pythonlist 类是经过高度优化的,在需要存储数据时是一个很优秀的选择。但仍有以下几点需要注意的劣势:动态数组的长度通常会大于实际存储的元素的数量当存储的元素数量不断增长时,动态数组扩展边界的性能较低靠近数组中间位置的插入和删除操作性能相对较低基于数组的序列和链表都能够以特定顺序存储元素,但是各自实现的方式差异很大。数组提供了一种更为“中心化”的表示方式,用一大段连续的...

weixin_39827036的博客 431

python and c++ data structures and operations

c++ STL in Leetcode

UniversityGrass的博客 512

Pythondeque vs list:性能差异全解析高效数据结构实战指南》

摘要: 本文深入解析Python中collections.dequelist的性能差异应用场景。通过对比测试显示,deque在头部插入/删除操作(O(1))上显著优于list(O(n)),特别适合队列、滑动窗口等需要频繁两端操作的场景。文章详细介绍了deque在LRU缓存、多线程任务队列等实际应用中的最佳实践,同时指出其不适合随机访问和排序操作。真实案例展示了deque在日志系统中的高效应用,并探讨了其在异步系统中的潜力。最终强调根据具体需求选择数据结构的重要性,为开发者提供了清晰的使用指南。

铭渊老黄 1019

deque python_pythondeque vs列表性能比较

In python docs I can see that deque is a special collection highly optimized for poping/adding items from left or right sides. E.g. documentation says:Deques are a generalization of stacks and queues ...

weixin_39946534的博客 268

deque python,pythondeque vs列表性能比较

In python docs I can see that deque is a special collection highly optimized for poping/adding items from left or right sides. E.g. documentation says:Deques are a generalization of stacks and queues ...

weixin_39929961的博客 304

Python栈实现全解析:listdequeLifoQueue的工程选型指南

栈(Stack)是一种遵循后进先出(LIFO)原则的基础数据结构,其核心价值在于通过严格的访问契约保障状态一致性操作可预测性。在Python中,虽无原生Stack类型,但可通过list、collections.dequequeue.LifoQueue三种方式实现,分别对应原型开发、高性能场景多线程安全需求。理解它们的时间复杂度差异——如list的摊还O(1)deque的严格O(1),以及LifoQueue内置锁带来的线程安全性——是避免线上故障的关键。典型应用场景包括括号匹配校验、迭代式深度优先搜索

weixin_34216107的博客 404

Python栈的三种实现:listdequeLifoQueue实战指南

栈(Stack)是一种遵循后进先出(LIFO)原则的基础数据结构,广泛应用于函数调用、表达式求值、撤销操作和图遍历等场景。其核心价值在于通过接口约束保障操作确定性逻辑健壮性。在Python中,虽无原生stack类型,但可通过list、collections.dequequeue.LifoQueue三种方式实现——它们并非简单替代关系,而是分别面向单线程轻量场景、高频稳定操作和多线程安全协作的不同工程需求。理解三者底层结构(动态数组/双向链表/带锁队列)、时间复杂度特征及典型陷阱(如list扩容抖动、de

weixin_30855099的博客 370

Python中LIFO实现选型指南:listdeque链表栈的工程权衡

LIFO(后进先出)是一种基础行为契约,而非具体数据结构,它定义了元素存取的时序逻辑。理解其底层原理——包括时间复杂度、内存布局线程安全性——是构建可靠栈组件的前提。在Python中,list、collections.deque和自定义链表均可履行LIFO契约,但履约成本差异显著:list适合小规模单线程场景,deque凭借块式存储保障O(1)最坏性能线程安全,成为高并发系统的工业级首选;而链表虽可控性强,却面临CPU缓存不友好等工程瓶颈。实际选型需结合并发量、数据规模、操作模式扩展需求综合判断,避免

weixin_30443075的博客 379

别再只用list了!Python collections.deque的5个实战场景,从滑动窗口到BFS

本文深入探讨了Python中collections.deque的5个高效应用场景,从滑动窗口算法到BFS实现。相比传统listdeque在两端操作上具有O(1)的时间复杂度优势,特别适合处理大规模数据和高频操作。文章通过代码示例展示了deque在滑动窗口、BFS、MaxStack、环形缓冲区和实时数据流处理中的实际应用,帮助开发者提升代码性能。

weixin_30615767的博客 403

python标准库、threading、multiprocessing、aiomultiprocess、进程/线程 同步、queue(队列)

multiprocessing 包提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。

freeking101的博客 2万+

Python deque 完全解析:这个“两头通”的数据结构,既是队列又是栈

deque是一个“双端队列”,两端操作都是 O(1)✅ 用appendpopleft队列(FIFO,先进先出)✅ 用appendpop栈(LIFO,后进先出)✅deque支持限长(maxlen)、旋转(rotate)、批量操作(extend✅绝不在中间插入/删除,绝不依赖它在随机访问上的性能。

qq_51553749的博客 231

双端队列(Deque)核心原理、多语言实现实战应用详解

在数据结构中,队列(Queue)和栈(Stack)是处理数据序列的基础工具,分别遵循先进先出(FIFO)和后进先出(LIFO)原则。然而,当应用场景需要同时高效地从序列头部和尾部进行添加或移除操作时,传统队列或栈便显得力不从心。双端队列(Deque,Double-Ended Queue)应运而生,它融合了队列和栈的特性,允许在两端进行O(1)时间复杂度的插入删除。其核心实现原理主要分为基于动态数组分块的循环缓冲区(如C++ STL的dequePython的collections.deque)和基于双向链

weixin_33795093的博客 493

Python队列堆应用:从多线程调度到Top K算法实战

队列和堆是计算机科学中两种基础且高效的数据结构,它们分别遵循先进先出(FIFO)和偏序组织原理,能够显著优化数据处理的性能。队列的核心价值在于管理有序数据流,特别适用于多线程环境下的任务调度线程间安全通信;而堆(通常实现为优先队列)则通过维护最小或最大元素,在O(log n)复杂度内实现动态极值查找,其技术价值在于处理流式数据和实时排序场景时的高效性。在Python中,queue模块为多线程编程提供了线程安全的Queue、LifoQueue和PriorityQueue,是构建生产者-消费者模型的基石;he

weixin_33895475的博客 497

双端队列(Deque)详解:原理、实现核心应用场景

在数据结构领域,线性表是基础且核心的概念,它定义了数据元素之间一对一的前驱后继关系。基于不同的物理实现操作特性,线性表衍生出了数组、链表、栈和队列等具体形态。其中,队列遵循先进先出(FIFO)原则,而栈遵循后进先出(LIFO)原则。双端队列(Deque)作为一种更通用的线性表,其核心原理在于允许在头部和尾部进行高效的插入删除操作,打破了单一存取顺序的限制。这种设计赋予了它极高的技术价值,使其能够灵活模拟栈或队列的行为,并在缓存友好性动态内存管理之间取得平衡。在工程实践中,双端队列是解决滑动窗口最大值、

weixin_34289454的博客 393
上一篇: trapping water
下一篇: BFS (Level Order Traversal)
screaming
博客等级 码龄19年 60粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值