collections.deque(双向链表的实现)

news/2025/2/4 19:04:30/文章来源:https://www.cnblogs.com/rolandhe/p/18698393

deque: deque是(double-ended queue)的缩写,读作"deck",底层机制是双向链表。
python内置的list的优势是足够灵活,根据索引快速访问一个元素,支持切片访问。 但list本质是一个连续的内存区域,当列表在追加元素的时候,有时候需要额外分配内存(动态分配内存有个内部机制,并不是每增加一个元素都需要做一次额外分配内存)。
当pop掉末尾元素时,也同样可能需要移除一个内存块。当从最左侧插入一个元素时,后面的元素都要依次移动一个位置,性能很差。
而deque做为一种双向链表的实现,在两端追加或删除元素的效率都非常高。但也有不足的地方,比如使用下标访问的速度不如list快,且不支持切片。 而两种类型在插入或移除处于中间位置的元素时,性能差不多。
由于deque的这种特性,使得它特别适合实现队列(queue)和栈(statck)。
deque([iterable[, maxlen]]): 使用一个iterable来构造一个deque,可以指定一个长度,如果iterable的长度超出了maxlen,那么只会保留最后maxlen长度的iterable元素。

import string
from collections import dequeprint(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz
que = deque(string.ascii_lowercase, 10)
print(list(que))  # ['q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

appendleft(x): 从左侧追加一个元素。append与list的功能相同,都是从右侧追加一个元素。
popleft(): 从左侧移除一个元素。pop函数与list里的pop功能相同,是从右侧移除一个元素。有一点不同的是,不提供位置参数。
extendleft(iterable): 从左侧追加一组元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.2.4 鲜花

交通网络 题解?hzoi898 交通网络 题解?Underground 是那个纯音乐啦~Ans 注意到:一个只能说真话,一个绝不说假话。这题有四样读法,你知道么?出一个毒瘤 ds 的最好方式就是把序列问题直接出到树上,考察选手树剖能力。正确的题意:给定一棵树,在时刻 \([tl, tr]\) 链加,查…

云手机和模拟器究竟有什么区别?一分钟带你理清楚

云手机和模拟器究竟有什么区别?一分钟带你理清楚概念 云手机:是在云端运行的虚拟手机,基于云计算技术和端云一体虚拟化技术,通过云服务器实现云服务。具备真实的ARM硬件,和真实手机的架构几乎一样,用户通过网络连接,在不同终端设备上远程操作,可轻松安装、管理APP。 模…

函数笔记

想了很久还是来更这个了。 0x00 一次函数 一般式 \(y=kx+b\),特殊的,当 \(b=0\),称作正比例函数。 图象 一次函数的图像是过\(\left(0,b\right)\)、\(\left( -\dfrac{b}{k},0\right)\)的直线。 而正比例函数的图像则是过原点的一条直线。 根据参数的符号,我们可以确定图象…

java基础(中)

java基础 Scanner对象Scanner类是用于获取用户输入的import java.util.Scanner;public class Hello {public static void main(String[] args){// 创建一个scanner对象来接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("Enter your name: &qu…

java基础1

java基础2 Scanner对象Scanner类是用于获取用户输入的import java.util.Scanner;public class Hello {public static void main(String[] args){// 创建一个scanner对象来接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("Enter your name: &q…

PCIe扫盲——TLP Header详解(三)

Completions Completions的TLP Header的格式如下图所示:这里来解释一下Completion Status Codes000b (SC) Successful Completion:表示请求(Request)被正确的处理; 001b (UR) Unsupported Request:表示请求是非法的或者不能被Completer所识别的。在PCIe V1.1以及之后的版…

03-requests库和session

接口测试经常会用到抓包工具,用来抓取接口测试中发送的HTTP请求信息和接收的响应信息。然后查看里面的具体内容。 fiddler是一款常用的HTTP抓包工具,抓包原理是代理式抓包。 Filters设置过滤项Inspectors查看请求消息和响应消息,点击Raw查看原始的请求消息和响应消息 首先客…

探索Java动态代理的奥秘:JDK vs CGLIB

动态代理是一种在 运行时动态生成代理类的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的 无侵入式增强(如日志、事务、权限控制等)。一、关于动态代理 1.1 简介 动态代理是一种在 运行时动态生成代理类 的技术,无需手动编写代理类代码。它通过…

Esp32s3(立创实战派)移植LVGL

Esp32s3(立创实战派)移植LVGL 移植: 使用软件EEZ studio 创建工程选择带EEZ Flow的,可以使用该软件更便捷的功能根据屏幕像素调整画布为320*240复制ui文件至工程 将生成的ui文件夹复制到main文件夹同级目录(ui文件夹在工程文件src中) 工程结构:修改声明头文件路径 首先将u…

字节系AI代码编辑器Trae:免费双模大模型+「Builder模式」

字节跳动技术团队近日正式推出AI代码编辑器Trae(官网:https://www.trae.ai/),这款定位为「自适应AI IDE」的开发工具,凭借其创新功能组合在技术圈引发关注。作为面向下一代开发者的智能编程平台,Trae正在重新定义人机协作的编码体验。 一、核心亮点解析双模大模型免费开放…

RocketMQ实战—3.基于RocketMQ升级订单系统架构

大纲 1.基于MQ实现订单系统核心流程的异步化改造 2.基于MQ实现订单系统和第三方系统的解耦 3.基于MQ实现将订单数据同步给大数据团队 4.秒杀系统的技术难点以及秒杀商详页的架构设计 5.基于MQ实现秒杀系统的异步化架构 6.全面引入MQ的订单系统架构的思维导图1.基于MQ实现订单系…

昆明理工大学2025通信复试真题及答案-通信核心课程综合

0854通信工程信号与系统 吴大正信号与线性系统分析昆工昆明理工大学通信工程817信号与系统考研信号与信息处理通信与信息系统通信工程F002通信核心课程综合通信工程(含宽带网络、移动通信等)