首页 > 编程语言 > 详细

Python堆常用操作

时间:2021-05-02 16:41:59      阅读:26      评论:0      收藏:0      [点我收藏+]

首先需要一个 import heapq的引用包

import heapq  #引入heapq包
class Test:
    def test(self):
        #创建堆 这里为了后面添加 所以创建一个空堆
        minheap=[]
        heapq.heapify(minheap)#将列表转换为堆 如果这里初始minheap不为空 则会自动生成最小堆
        #添加堆内元素
        heapq.heappush(minheap,10)
        heapq.heappush(minheap,8)
        heapq.heappush(minheap,9)
        heapq.heappush(minheap,2)
        heapq.heappush(minheap,11)
        heapq.heappush(minheap,1)
        print(minheap) #输出结果为[1,2,9,10,8,11]
        #查找堆顶元素
        print(minheap[0]) #1
        #删除元素/弹出堆顶元素 边输出边删除
        heapq.heappop(minheap)
        #长度
        len(minheap)
        #遍历
        while len(minheap)!=0:
            print(heap.heappop(minheap))
        #将元素压入堆中,并弹出最小元素 调用的heapq.heappushpop() 相当于先调用heappush再调用heappop() 但是比它们分别调用的效率要高
        b=heapq.heappushpop(minheap,0)
        print(b) #0
        print(minheap) #[1,2,9,10,8,11]
        #弹出并返回heap中最小的一项 同时压入新的item 调用heapreplace() 相当于先调用heappop()再调用heappush() 效率同样比分别调用要高
        c=heapq.heapreplace(minheap,0)
        print(c) #1
        print(minheap) #[0,2,9,10,8,11]
        ‘‘‘将多个已排序的输入合并为一个已排序的输出 调用heapq.merge(iterables, key=None, reverse=False)   
        其中iterables为多个已排序的输入,key为None时,直接比较元素的大小,reverse=True逆序排列‘‘‘
        d = [0, 1, 3, 5]
        e = [2, 6, 8, 9]
        print(list(heapq.merge(d,e)))#[0, 1, 2, 3, 5, 6, 8, 9]
        #返回前n个最大元素组成的列表 注意是列表!!
        g=heapq.nlargest(3,minheap)
        print(g) #[11,10,9]
        #返回前n个最小元素组成的列表 注意是列表!!
        f=heapq.nsmallest(3,minheap)
        print(f) #[0,2,8]
        #其中heapq.nlargest()和heapq.nsmallest()的参数都为(n,iterable,key=None)原理和上述的 heapq.merge()的

PS:Python默认构建最小堆 而没有方法来直接建立最大堆 一般来说都是通过使用取反的方式来进行最大堆的构建的

Python堆常用操作

原文:https://www.cnblogs.com/leohbz/p/14725789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!