堆heapq

堆相当于完全二叉树的数组对象

堆中的某个节点的值总是不大于或小于其父节点的值

堆总是完全二叉树


对于Python存在堆模块

heapq


看一下常见方法


首先是heapify   建立堆的方法

heapq.heapify(x),在线性时间内将列表原地转换为堆

要注意没有返回值,这是原地进行的

所以不要写成 xxx = heapq.heapify(x)    不要这么做


建立堆还有一个方法     heapq.heappush(heap,item)

这个方法是将item元素加入heap堆中,有点像是append


接下来是heapq.heappop(heap)

建立了堆就要对堆进行操作,这个方法是“弹出”堆中最小元素,保持堆不变,如果堆为空,那么会报错

注意是弹出,如果想要得到最小元素应该使用heap[0],使用索引得到相应元素

然后是下一个heapq.heappushpop(heapitem)

这是一个push和pop的结合,heap为堆,item为人堆元素,函数结果是弹出最小值

heapq.heapreplace(heapitem)   弹出并从堆中返回最小的项,然后推送新。堆大小不变。如果堆为空,报错

注意和上面的pushpop的区别,pushpop是先入堆,然后弹出最小值,而replace是先弹出最小值,然后入堆

然后是比较难理解的heapq.。merge(*iterables)

将多个排序的输入返回成一个排序的输出,返回排序后值的迭代器


注意返回的是迭代器,


最后是heapq.nlargest(n,iterables)和heapq.nsmallest(n,iterables)

参数都是数量n和可迭代对象

分别返回对应n数量的最大值和最小值


完成了堆模块的基本学习

你可能感兴趣的:(堆heapq)