Python专家编程系列: 8. 高级数据结构介绍

0. 标题

Python专家编程系列: 8. 高级数据结构介绍
id:4

作者: quantgalaxy@outlook.com   
blog: https://blog.csdn.net/quant_galaxy  
欢迎交流

1. 介绍

Python中,除了大家常用的数据结构外,还有几个非常好用的数据结构,这里主要介绍下Heap(堆),Deque(双端队列),Array(数组)。

2. 高级数据结构介绍

2.1 Heap(堆)

堆是一种基于树的数据结构,用于实现称为优先队列的抽象数据类型。
二叉树通常用于实现堆,堆主要有两种类型:

  1. 最小堆
    根结点的键值是所有堆结点键值中最小者的堆。
  2. 最大堆
    根结点的键值是所有堆结点键值中最大者的堆。

python提供了heapq模块,用于使用堆结构。

2.1.1 创建一个堆

import heapqlst = [1,5,3,6,2]heapq.heapify(lst)print(lst)
#[1, 2, 3, 6, 5]

2.1.2 给最小堆中添加一个元素

heapq.heappush(lst, 10)
heapq.heappush(lst, 20)print(lst)
#[1, 2, 3, 6, 5, 10, 20]

2.1.3 从最小堆中移除最小元素

heapq.heappop(lst)
#1print(lst)
# [2, 5, 3, 6, 20, 10]

2.1.4 查询堆中的最小的n个元素

heapq.nsmallest(3, lst)
# [2, 3, 5]

2.1.5 查询堆中的n个最大元素

heapq.nlargest(1, lst)
# [20]
作者: quantgalaxy@outlook.com   
blog: https://blog.csdn.net/quant_galaxy  
欢迎交流

2.2 Deque(双端队列)

双端队列是栈和队列的泛化,允许从两端进行追加和弹出操作。
它比列表更可取,因为它在任何方向上的追加和弹出操作的时间复杂度都大约为0(1)。
另一方面,对于pop(0)和insert(0, v)操作,列表的时间复杂度为O(n)。

2.2.1 创建一个双端队列

from collections import deque# Create a new deque
d = deque([1, 2, 3, 4])

2.2.2 添加一个元素

# Add to the right end
d.append(5)  # Add to the left end
d.appendleft(0)

2.2.3 移除一个元素

# Remove from the right end
rightmost = d.pop()  # Remove from the left end
leftmost = d.popleft()

2.2.4 翻转一个双端队列

print(d)
# deque([1,2,3,4])d.reverse()print(d)
# deque([4,3,2,1])
作者: quantgalaxy@outlook.com   
blog: https://blog.csdn.net/quant_galaxy  
欢迎交流

2.3 Array(数组)

数组是一种数据结构,它将元素存储在连续的内存位置中。
虽然列表可以存储异构数据(不同类型的数据),但数组存储同构项(在初始化时需要类型规范),这使得它们对于统一数据的大型数据集来说内存效率更高。
数组存储同构项(在初始化时需要类型规范)。一定要记住,这是和list最大的不同。

当我们创建一个数组的时候,需要指定数组元素的类型,不同类型有不同的空间占用:

  • b: signed char (1 byte)
  • B: unsigned char (1 byte)
  • i: signed int (2 bytes)
  • f: float (4 bytes)
  • d: double (8 bytes)

2.3.1 创建一个数组

from array import array # Create an array of integers
arr_int = array('i', [1, 2, 3, 4, 5])# Create an array of floats
arr_float = array('f', [1.0, 2.1, 3.2])

2.3.2 往数组中添加一个元素

arr_int.append(6)

2.3.3 加入多个元素

arr_int.extend([7, 8, 9])

2.3.4 删除元素

last_element = arr_int.pop()  # Removes and returns the last elementelement_at_index_2 = arr_int.pop(2)  # Removes and returns the element at index 2

2.3.5 索引和切片操作

print(arr_int[0])  # First element
print(arr_int[-1])  # Last element
print(arr_int[2:5])  # Elements from index 2 (inclusive) to 5 (exclusive)

注意,如果希望使用多维数组并对数组进行高级数学或统计操作,请选择Numpy数组。

3. 作者信息

作者: quantgalaxy@outlook.com   
blog: https://blog.csdn.net/quant_galaxy  
欢迎交流

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

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

相关文章

#Uniapp:uni-app中vue2生命周期--11个

uni-app中vue2生命周期 生命周期钩子描述H5App端小程序说明beforeCreate在实例初始化之后被调用 详情√√√created在实例创建完成后被立即调用 详情√√√beforeMount在挂载开始之前被调用 详情√√√mounted挂载到实例上去之后调用 详情 注意:此处并不能确定子组…

GoLang:sql.Exec()报错

【报错内容】 Sorry, can not exec into mysql: Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ... 【原因】 sql.Exec 在大多数情况下只能执行单条SQL语句…

java面试题2024

前言 准备换工作了,给自己定个目标,每天至少整理出一道面试题。题型会比较随机,感觉这样更容易随机到面试官要问的东西。整理时我会把我认为正确的回答写出来,比较复杂的也尽量把原理贴出来,争取做到无论为了应付面试&…

数字化转型助力保险业腾飞,国产化安全产品护航高质量发展

近几年,全球贸易和经济受到了巨大冲击,众多贸易企业经营环境面临困难,某保险公司为国内企业提供强有力的保险保障,大大减轻了企业在国际贸易中风险,为国家经济恢复起到关键的作用。2022年,该保险公司承保金…

麒麟Linux安装新版微信的方法

麒麟Linux系统目前有v10和v10sp1,注意,恶趣味的是v10和v10sp1竟然不通用,这导致了一些国产程序出现运行bug,通过系统自带的麒麟商店无法图形界面安装,甚至搜索不到微信等等一系列问题,易用度确实很差。 解决办法也很简…

【一周年创作总结】人生是远方的无尽旷野呀

那一眼瞥见的伟大的灵魂,却似模糊的你和我 文章目录 📒各个阶段的experience🔎大一寒假🔎大一下学期🔎大一暑假🔎大二上学期(现在) 🍔相遇CSDN🛸自媒体&#…

Go gin框架控制器接收文件

1. 限定文件参数名(一般做法) func FileController(c *gin.Context) {//取表单中namefile的文件fileHeader, err : c.FormFile("file")//_, fileHeader, err : c.Request.FormFile("file")//这种也行if err ! nil {log.Println(err…

《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案2

阿丹-有话说: 第二种多环境的配置选择解决方案,这个更加的灵活没在配置方面都选择了一种yml的书写方式。 原理: 在Spring Boot中,spring.profiles.active 属性用于指定当前应用程序应激活哪个环境配置。当Spring Boot应用启动时…

【金融支付】常用术语和定义

文章目录 术语和定义缩略词全称选自 术语和定义 下列术语和定义适用于本标准。 3.1 银行卡 bank card 商业银行等金融机构及邮政储汇机构向社会发行的,具有消费信用、转账结算、存取现金等全部或部分功能的信用支付工具。 3.2 磁条卡 magnetic stripe card 物理特性…

我没有源码有可执行程序exe 带有一个dll库,我怎么调试dll来查看exe转入的参数

如果你只有一个可执行的程序(EXE)和一个动态链接库(DLL),而没有源代码,调试起来会比较复杂。不过,你仍然可以使用一些工具和方法来调试DLL并查看EXE传入的参数。以下是一些步骤和建议&#xff1…

112.Qt中的窗口类

我们在通过Qt向导窗口基于窗口的应用程序的项目过程中倒数第二步让我们选择跟随项目创建的第一个窗口的基类, 下拉菜单中有三个选项, 分别为: QMainWindow、QDialog、QWidget如下图: 常用的窗口类有3个 在创建Qt窗口的时候, 需要让自己的窗口类继承上述三个窗口类的…

设计模式——解释器模式

更多内容,前往IT-BLOG 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的表达式(例如:正则表达式等),那么这些问题实例将是该表达式的一些句子…

科技创新领航 ,安川运动控制器为工业自动化赋能助力

迈入工业4.0时代,工业自动化的不断发展,让高精度运动控制成为制造业高质量发展的重要技术手段。北京北成新控伺服技术有限公司作为一家集工业自动化产品销售、系统设计、开发、服务于一体的高新技术企业,其引进推出的运动控制产品一直以卓越的…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…

海量数据处理数据结构之Hash与布隆过滤器

前言 随着网络和大数据时代的到来,我们如何从海量的数据中找到我们需要的数据就成为计算机技术中不可获取的一门技术,特别是近年来抖音,快手等热门短视频的兴起,我们如何设计算法来从大量的视频中获取当前最热门的视频信息呢&…

Windows下上帝模式的实现

在windows系统上有个特殊模式,那就是上帝模式,几乎包含了windows中所有的快捷方式,有很多小伙伴还不知道,让我们一起来实现这一操作吧! 一、首先新建一个文件夹 二、接着将文件夹重命名,命名为以下代码&am…

考试面试轻松应对:技术人的备考宝库 | 开源专题 No.58

yangshun/tech-interview-handbook Stars: 97.9k License: MIT 这个项目是一个技术面试手册,提供了免费和精选的技术面试准备材料。它包括最佳实践问题、编码面试的常见问题、如何准备编程面试以及算法小抄等内容。该项目的核心优势和主要功能有: 提供…

楼宇管理新智慧:Panorama SCADA楼宇管理系统应用实例

一、背景介绍 楼宇管理系统旨在集中控制和监测楼宇运营,涵盖暖通空调(HVAC)、照明、电力系统、消防和安全系统等。通过直观的用户界面,用户得以实时监测和精准掌控这些系统,从而提升能源效率、确保设备正常运行&#…

记录解决mac版islide无法和PPT同步使用的问题

该情况请参照下面这篇帮助文档设置“自动化”权限以及PowerPoint的“完全磁盘访问”: https://support.islide.cc/hc/kb/article/1378911/ PS:自动化”权限以及PowerPoint的“完全磁盘访问”设置好之后请重启系统看下是否可以下载资源。 如果重启系统之…

时钟周期、机器周期与指令周期

一、指令周期(Instruction Cycle) CPU从存储器中取出并执行一条指令所需的全部时间称之为指令周期。 二、时钟周期(cycle,clock cycle) 主频:计算机内部主时钟的频率,通常以MHz或者GHz为单位&am…