Python heapq模块

heapq模块提供了如下几个函数:
函数 用法
heapq.heappush(heap, item) 把item添加到heap中(heap是一个列表)
heapq.heappop(heap) 把堆顶元素弹出,返回的就是堆顶
heapq.heappushpop(heap, item) 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多
heapq.heapreplace(heap, item) 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多
heapq.heapify(x) 堆化(x是一个列表),默认从小到大排序
heapq.merge(*iterables) 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器
heapq.nlargest(n, iterable, key=None) 返回最大的n个元素(Top-K问题)
heapq.nsmallest(n, iterable, key=None) 返回最小的n个元素(Top-K问题)
import heapq
import random# Top-K
mylist = list(random.sample(range(100), 10))
k = 3
largest = heapq.nlargest(k, mylist) # 换回列表中最大的K个值
smallest = heapq.nsmallest(k, mylist)  # 返回列表中最小的K个值print('original list is', mylist)
print('largest-'+str(k), '  is ', largest)
print('smallest-'+str(k), ' is ', smallest)heapq.heapify(mylist)  # heapify 堆化,默认从小到大排序
print('heapify  list is', mylist)heapq.heappush(mylist, 105)
print('pushed heap is', mylist)heapq.heappop(mylist) # 默认弹出[0]
print('popped heap is', mylist)# heappushpop & heapreplace
heapq.heappushpop(mylist, 130)    # 先将130加入列表在弹出第一个元素
print('heappushpop', mylist)heapq.heapreplace(mylist, 2)    # heappop -> heappush 先pop再把2加到列表中
print('heapreplace', mylist)

输出结果为:


original list is [18, 6, 10, 24, 48, 2, 9, 25, 16, 89]
largest-3   is  [89, 48, 25]
smallest-3  is  [2, 6, 9]
heapify  list is [2, 6, 9, 16, 48, 10, 18, 25, 24, 89]
pushed heap is [2, 6, 9, 16, 48, 10, 18, 25, 24, 89, 105]
popped heap is [6, 16, 9, 24, 48, 10, 18, 25, 105, 89]
heappushpop [9, 16, 10, 24, 48, 130, 18, 25, 105, 89]
heapreplace [2, 16, 10, 24, 48, 130, 18, 25, 105, 89]

Python heapq模块相关推荐

  1. python heapq模块使用

    Python内置的heapq模块 Python3.4版本中heapq包含了几个有用的方法: heapq.heappush(heap,item):将item,推入heap >>> it ...

  2. python heapq模块查找集合中最大或最小n个元素列表

    怎样从一个集合中获得最大或者最小的 N 个元素列表? heapq 模块有两个函数: nlargest() 和 nsmallest() 可以完美解决这个问题. 举例说明: 一.集合类型 "&q ...

  3. python之堆heapq模块

    python之堆heapq模块 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小于等于该节点所有子节点的值. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆. ...

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

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

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

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

  6. Python 的 heapq 模块源码分析

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

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

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

  8. python分配 使最大的最小_python3中的heapq模块使用

    ###heapq-堆排序算法 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 二叉树 树中每个节点至多有两个子节点 满二叉树 树中除了叶子节点,每个节点都有两个子节点 什么是完 ...

  9. Python常用数据结构之heapq模块

    Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...

最新文章

  1. 69张图看懂Elon Musk的脑机接口芯片项目
  2. rmi反序列化导致rce漏洞修复_JAVA反序列化漏洞解决办法
  3. 算法之动态规划初步(Java版)
  4. C++中使用new和delete运算符实现二维数组的操作
  5. 盘一盘推荐系统里值得一读的那些论文
  6. 商汤3DAR团队-3D视觉组招聘
  7. Log4j配置学习文档之三 参考
  8. fstream与 C 风格(例如fread 和 fwrite )两种读写文件方法的效率比较
  9. uniapp ---- 添加分页
  10. DHCP详细工作过程(转)
  11. CentOS6.5配置网络
  12. C# Winform控件包 MaterialSkin使用教程 -- 侧边栏篇
  13. xp系统做无盘服务器,锐起无盘网吧系统无盘XP系统特点
  14. 巨准SCRM私域案例拆解丨看看WonderLab如何霸屏朋友圈
  15. web前端培训 - 12个有用的 JavaScript 代码片段
  16. 【Python爬虫】爬取豆瓣电影Top 250
  17. 支持十亿级密态数据、低代码,蚂蚁集团发布隐语开放平台
  18. 如何在word里里面打勾
  19. matlab提示参数不足,为什么提示输入参数条目不足?
  20. 连就连,你我相约定百年。谁若97岁死,奈何桥上等三年!

热门文章

  1. postgres主从配置
  2. java运行环境jdk的安装和环境变量的配置
  3. FPGA学习(第8节)-Verilog设计电路的时序要点及时序仿真
  4. Windows 10 IIS所有的html返回空白
  5. 快速简易的分解歌词文件
  6. 坑爹BUG,没有详细的看还真看不出问题
  7. 在web3上搭建ecshop网上商城
  8. 为什么选择 npm script?
  9. Jeecg开发平台 - Online表单专题课程
  10. MinIO Docker 快速入门