使用堆可以非常方便的寻找最小值,实例如下:

import heapq
nums = [1, 8, 2, 23, 7, -5, 18, 23, 42, 37, 2]
heapq.heapify(nums)
print(nums)
print(heapq.heappop(nums))
print(nums)
print(heapq.heappop(nums))
print(nums)
print(heapq.heappop(nums))
print(nums)

输出:

可以发现,使用heapify之后,第一个值变成了最小值,但是其他的序列还是乱序。再使用heappop之后,移除了左边第一个值,并使得新的数组的左边第一个值为最小值。

使用堆还能够找到最大或者最小的几个值。看下面实例

import heapq
portfolio = [{'name': 'IBM', 'price': 91.1},{'name': 'AAPL',  'price': 543.22},{'name': 'FB',  'price': 21.09},{'name': 'HPQ',  'price': 31.75},{'name': 'YHOO', 'price': 16.35},{'name': 'ACME',  'price': 115.65}]
cheap = heapq.nsmallest(2, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(2, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)

第一个nsmallest 表示寻找最小的n个值

第二个nlargest表示寻找最大的n个值

输出如下:

python之heapq相关推荐

  1. python使用heapq快速查找最大或最小的 N 个元素

    python使用heapq快速查找最大或最小的 N 个元素 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆.( heapq ...

  2. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  3. python中heapq的库是什么_Python中heapq模块的用法

    heapq 模块提供了堆算法.heapq是一种子节点和父节点排序的树形数据结构.这个模块提供heap[k] <= heap[2*k+1] and heap[k] <= heap[2*k+2 ...

  4. Python 的 heapq 模块源码分析

    作者:weapon 来源:https://zhuanlan.zhihu.com/p/54260935 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中 ...

  5. python利用什么模块_什么是Python的heapq模块?

    我尝试了"heapq"并得出结论,我的期望与我在屏幕上看到的不同.我需要有人解释它是如何工作的以及它在哪里有用. If you need to maintain a sorted ...

  6. Python取top N相关的模块:heapq模块

    Python取top N相关的模块:heapq模块 原文:[Python]Python取top N相关的模块:heapq模块_小怪孩的成长之路-CSDN博客_python 取top 最近在程序中需要取 ...

  7. python树状节点 可拖拽_Python 的 heapq 模块源码分析

    原文链接:Python 的 heapq 模块源码分析 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中的子节点都与父母排序顺序关系.因为堆排序中的树是 ...

  8. Python 模块之heapq

    1.heapq介绍: 1)堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆.( heapq库中的堆默认是最小堆) 最大堆,树种各个父节点的值总是大于或等于任何一个子节点的值. 最小堆,树种各个父节 ...

  9. Python中的堆实现:heapq 模块——利用堆结构实现快速访问数据流中的中位数

    堆结构 堆结构是一种优先队列,可以以任意顺序添加对象,并随时查找或删除最小(大)的元素,或者查找和删除前 K 个最小(大)元素.相比于列表方法min() / max(),这样做的效率要高得多. 堆结构 ...

最新文章

  1. CPU0 处理器的架构及应用
  2. 第二课 , 启动 ./start-all.sh
  3. 微服务架构与Docker容器之间关系
  4. C#调用非托管C++DLL:直接调用法
  5. Pinterest 首位产品经理:爆发式增长背后的 5 大经验总结
  6. 北斗导航 | 坐标转换:ECEF转LLA:GPS坐标系:WGS84(matlab代码)
  7. 从零开始做一个SLG游戏(三):用unity绘制图形
  8. 你还在使用fastjson,可以尝试jsoncode
  9. 云访问安全代理(CASB)行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. ObjC学习2-语法循环、条件,原来像学C语言一样啊!
  11. CentOS 安装Python3.x常见问题
  12. 自己做的PPT试题或其它文件模板有时被系统还原成原来默认的样子,如何解决?
  13. PWA登陆iOS了,但它还有这些缺陷
  14. centos 安装wget命令
  15. C语言——基础链表详解
  16. 俄罗斯、乌克兰程序员薪资大曝光!(来长长见识)
  17. 红包码收款码合二为一
  18. maven 入门(转)
  19. 计算机科学导论第五版第二章答案,计算机科学导论样题1答案
  20. 火狐浏览器中如何设置自动翻译网页

热门文章

  1. 达沃斯讨论最大的技术革命机会
  2. IEC,ASTM,ISO,DIN,JIS等国际标准网站
  3. Tomcat如果默认8080被占用修改端口号和查询端口号地址
  4. ide循环执行用例 selenium_Selenium Web自动化Page Object设计模式——循环执行测试用例...
  5. f score matlab,机器学习中如何用F-score进行特征选择
  6. JDK源码分析(2)LinkedList
  7. oracle关键字作为字段名使用方法
  8. burpsuite_pro的使用
  9. mysql查看数据库所占用的空间
  10. (转)一段如何調用Button.Click事件的故事