- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
读完 Guido 的 Sorting a million 32-bit integers in 2MB of RAM using Python ,我发现了 heapq
模块,但这个概念对我来说非常抽象。
一个原因是我没有完全理解堆的概念,但我确实理解 Guido 是如何使用它的。
现在,除了他有点疯狂的例子,你会用 heapq
模块做什么?
它必须始终与排序或最小值相关吗?它只是你使用的东西,因为它比其他方法更快吗?或者你能做一些你离不开的非常优雅的事情吗?
最佳答案
heapq module通常用于实现 priority queues .
您会在事件调度器中看到优先级队列,它们不断添加新事件并且需要使用堆来有效地定位下一个调度事件。一些示例包括:
heapq 文档包括 priority queue implementation notes它解决了常见的用例。
此外,堆非常适合实现部分排序。例如, heapq.nsmallest 和 heapq.nlargest 与完整排序后跟切片相比,内存效率更高,比较次数更少:
>>> from heapq import nlargest
>>> from random import random
>>> nlargest(5, (random() for i in xrange(1000000)))
[0.9999995650034837, 0.9999985756262746, 0.9999971934450994, 0.9999960394998497, 0.9999949126363714]
关于python - 在现实生活中,您会使用 heapq Python 模块做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8627109/
笙歌 痞性. 剩余 青怏 洒脱 现实 搁浅° 软萌 路途 娼妓 离骚 逐你 微尘 迷魂 ▼ 扎心 堇夏 残年っ ╭淡妆╮ 24K.纯疯 隐痛
我正在尝试不费吹灰之力地实现完全有效的持久性无知。不过我有很多问题: 最简单的选项 这真的很简单——可以像在 SOA 中那样使用 Spring Data 注释对实体进行注释(但让它们真正执行逻辑)?除
我想完成一项简单的任务。 我在可变宽度容器中有一个图像。 容器的宽度可以为 300、400、700 或 900 像素。这是通过媒体查询完成的图像应占据该容器的所有宽度。所以它也将是 300、400、7
我在使用 Storyboards AutoRotation 和 iPhone 时遇到问题。我已经将一个非常简单的项目与 3 个 View Controller 放在一起,并将其上传到 gitHub 以
我是一名优秀的程序员,十分优秀!