python的十大数据结构之堆队列heapq(heap queue)
heap queque(堆队列),是一个完全二叉树,并且满足一个条件:每个节点(叶节点除外)的值都大于等于(或小于等于)它的子节点。提供了构建小顶堆的方法和一些小顶堆的基本操作方法(如入堆、出堆等),可以用于实现堆排序算法。
创建堆的两种方法:
import heapq lists = [3, 10, 20, 52, 2, 83, 52, 81, 51]
#一、 创建空列表,然后使用heappush将数据添加到空列表中,每添加一个新数据后,该列表都满足小顶堆特性。
heap = []
for i in lists:
heapq.heappush(heap, i)
print("lists: ",lists)
print("heap: ",heap)
# 二、使用heapify直接将数据列表调整为小顶堆格式
heapq.heapify(lists)
print("The lists after heap is : ",lists)
注:小顶堆含义,每个节点(叶节点除外)的值都小于等于其子节点的值,根节点的值是所有节点中最小的。大顶堆反之。
使用heapq进行堆排序:
import heapq
lists = [3, 10, 20, 52, 2, 83, 52, 81, 51]
# 这里需要先构建堆,否则直接heappop得不到排序后的结果
heap = []
for i in lists:
heapq.heappush(heap, i) print(heap[0])
# heappop(heap),依次取出堆顶的值,并将剩余的数据构造成新的小顶堆
heap_sort = [heapq.heappop(heap) for _ in range(len(heap))]
print("heap sort result: ", heap_sort)
获取堆中的最大值和最小值
import heapq lists = [3, 10, 20, 52, 2, 83, 52, 81, 51]
# 这里的heapq.heapify(lists)写与不写效果一样
heapq.heapify(lists)
# heapq.nlargest和heapq.nsmallest两个函数可以用于堆,也可以用于列表,功能相同。所以前面无需构造堆
print(heapq.nlargest(2, lists))
print(heapq.nsmallest(3, lists))
堆中元素的替换方法
import heapq # 这里演示heappushpop和heapreplace的用法
# heappushpop,先入堆再出堆,所以堆元素不变化
array_c = [10, 7, 15, 8]
heapq.heapify(array_c)
print("before: ",array_c)
# 先push再pop
item = heapq.heappushpop(array_c, 5)
print("after: ",array_c)
print(item) # heapreplace,先出堆,再将新元素入堆,堆元素发生变化
array_d = [10, 7, 15, 8]
heapq.heapify(array_d)
print("before: ",array_d)
item = heapq.heapreplace(array_d, 5)
print("after: ",array_d)
print(item)
堆的方法:
heapq.heapify(x):创建堆,将list转化为堆
heapq.heappush(heap, item): 添加新元素到堆
heapq.heappop(heap):弹出堆顶元素,并将剩余元素组成新的小顶堆
heap.heappushpop(heap, item):先将item入堆,再将item出堆
heapq.merge(*iterables, key = None, reverse = False):暂未了解
heapq.heapreplace(heap, item):先弹出堆顶元素,再将item入堆
heapq.nlargest(n, iterable, key = None):取堆、队列中最大的n个值,key为关键字,使用示例:cheap = heapq.nsmallest(3, portfolio, key = lambda s:s['price'])
heapq.nsmallest(n, iterable, key = None)
python的十大数据结构之堆队列heapq(heap queue)的更多相关文章
- python实现十大经典排序算法
Python实现十大经典排序算法 代码最后面会给出完整版,或者可以从我的Githubfork,想看动图的同学可以去这里看看: 小结: 运行方式,将最后面的代码copy出去,直接python sort. ...
- 一篇夯实一个知识点系列--python实现十大排序算法
写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...
- Python实现十大经典排序算法(史上最简单)。
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
- Python实现十大经典排序算法(史上最简单)
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
- 用Python实现十大经典排序算法-插入、选择、快速、冒泡、归并等
本文来用图文的方式详细讲解了Python十大经典排序算法 —— 插入排序.选择排序.快速排序.冒泡排序.归并排序.希尔排序.插入排序.桶排序.基数排序.计数排序算法,想要学习的你们,继续阅读下去吧,如 ...
- 排序算法——(2)Python实现十大常用排序算法
上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- Python不能用于大型项目?人们对Python的十大误解
Python 类型系统的特点是拥有强大.灵活的类型操作. 维基百科上对此作出的阐述. 而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系 ...
- python实现十大核心算法(桶排没实例)
# author:sevenduke # 2019-06-11 # 一.交换排序 # 排序算法的温故:冒泡排序 def dubblesort(arr): for i in range(0, len(a ...
- 人工智能+Python:十大Markdown语法简明教程
Markdown 是一种轻量级的标记语言,用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成极富表现力的文档,目前也被越来越多的写作爱好者,撰稿者广泛使用.本文希望用直观的方法来讲述Mar ...
随机推荐
- 【Java】Socket Programming 网络编程
Java提供了网路相关的类库,无痛连网,底层细节交给JVM控制 Java实现了一个跨平台的网络库,我们开发面对的是一个统一的网路编程环境 目的: 直接或者间接的通过网络协议和其他计算机数据交互,通讯 ...
- 【Layui】02 图标 Icon
官网下载地址: https://www.layui.com/ 学习参考: https://www.bilibili.com/video/BV1ct411n7SN [Layui的文件结构] 我们只需要这 ...
- 【转载】 Integrating New Games into Retro Gym
https://medium.com/aureliantactics/integrating-new-games-into-retro-gym-12b237d3ed75 OpenAI's retro ...
- ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file
如题: ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file 网上找了一些资料 ...
- 如何为华为超算平台设置cuda路径
在提交主机上修改.bashrc文件: 第一种: 使用运行主机上的cuda环境: # CUDAexport PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LI ...
- JS Map对象与map方法
前言 最近遇到一个遍历的问题,查资料的过程中,发现有个 Map 对象,提供了很多方法可以轻松地获取我们想要的数据,之前只知道有 map ,没想到还有 Map ,是不是有点绕?不急,这两个东西都是虽然 ...
- SMU Spring 2023 Contest Round 4(第 21 届上海大学程序设计联赛 春季赛)
A. Antiamuny wants to learn binary search 签到题. #include <map> #include <set> #include &l ...
- SMU Summer 2023 Contest Round 10(ICPC — International Collegiate Programming Contest Asia Regional Contest, Yokohama,2018)
SMU Summer 2023 Contest Round 10(ICPC - International Collegiate Programming Contest Asia Regional C ...
- 工作常用SQL
工作常用SQL Excel生成SQL 这个好用 ="insert into t_gk_mapping(id,gk_project_name,gk_project_code,main_proj ...
- zabbix网络拓扑图介绍
"zabbix network map"可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map,通过map可以了解应用的整体状况:服务器是否异常.网络是否有故障.应 ...