Python使用heapq实现小顶堆(TopK大)

    # !/usr/bin/env python
    # -*- coding:gbk -*-

    import sys
    import heapq

    class TopKHeap(object):
        def __init__(self, k):
            self.k = k
            self.data = []

        def push(self, elem):
            if len(self.data) < self.k:
                heapq.heappush(self.data, elem)
            else:
                topk_small = self.data[0]
                if elem > topk_small:
                    heapq.heapreplace(self.data, elem)
        def topk(self):
            return [x for x in reversed([heapq.heappop(self.data) for x in xrange(len(self.data))])]


    def main():
        list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        th = TopKHeap(5)

        for i in list_num:
            th.push(i)

        print th.topk()

    if __name__ == "__main__":
        main()

但是如果想实现一个大顶堆怎么办?把在数据进堆的时候把所有数据都去相反数就可以啦!

你可能感兴趣的:(Python)