多语言展示
当前在线:965今日阅读:23今日分享:31

Python库详解之heapq库

Python的heapq库提供了堆队列算法的实现,也就是优先级队列算法.堆本身是二叉树,每个父节点的值小于等于它的任何子节点.使用优先级队列的好处有:能够任意顺序增加对象,并且很容易找到最小元素,于min函数相比,效率会高些.heapq的简单结构如下图所示:每个子节点的索引:2k+1或者2k+2.
工具/原料
1

ubuntu 16.04LTS系统

2

交互开发环境IPython 2.4.1

3

Python 2.7.12

方法/步骤
2

2:函数heapq.heappush(heap, item)功能:把一个对象压入堆heap.注意:图中用例所示,item的类型为一个元素,一个列表都可以入堆.

3

3:函数heapq.heappop(heap)功能:从堆heap里面弹出最小的元素.如果heap是空的,会抛出异常.注意:如果相访问heap的最小元素而不从heap弹出,则用heap[0],参见堆特性.

4

4:heapq.heappushpop(heap, item)功能:把一个元素压到堆,然后从heap弹出一个最小的元素.注意:该组合操作的效果要优于调用函数heappush()和heappop().

5

5:函数heapq.heapreplace(heap, item)功能:从堆heap弹出最小的元素,然后往堆heap压入新的元素.注意:该操作不会影响堆的长度,对固定堆的情况很有用.此外效果优于调用函数heappush()和heappop().

6

6:函数heapq.merge(*iterables)功能:把多个堆队列合并,并返回一个迭代器.和函数sorted(itertools.chain(*iterables))类似,但返回值不同.

7

7函数:heapq.nlargest(n, iterable[, key])功能:返回迭代数据集合iterable中第n大的元素.注意:该函数比通常计算多个list第N大的元素方法(如多个list的合并,排序等)效果更方便快捷.

8

8:函数heapq.nsmallest(n, iterable[, key])功能:返回迭代数据集合iterable中第n小的元素.注意:该函数比通常计算多个list第N小的元素方法(如多个list的合并,排序等)效果更方便快捷.

注意事项

注意多使用含有组合操作的函数比如:heappushpop(),heapreplace等可以提高算法的性能.

推荐信息