繁体   English   中英

python是否具有内置的min-heap数据结构?

[英]Does python have a built in min-heap data structure?

python在2.7.3中是否具有内置的min-heap数据结构?

我不想导入代码。

我想要类似的东西

myheap = minheap(key=lambda x: x[1])
myheap.add(obj)
o = myheap.pop()

这可能吗?

就像每个人都说的那样,就是heapq了-但是,就像没有人提到的那样,它支持key= 所以,你需要回落到美好的旧DSU(装饰排序-去除装饰)成语key=内部使用无论它的支持(可惜不是在heapq ,除了功能nlargestnsmallest不真的有很多事要做模块的其余部分)。

因此,您可以添加一个键来包装heapq功能,例如在您自己的类中:

import heapq

class MyHeap(object):
    def __init__(self, key, data=())
        self.key = key
        self.heap = [(self.key(d), d) for d in data]
        heapq.heapify(self.heap)

    def push(self, item):
        decorated = self.key(item), item
        heapq.heappush(self.heap, decorated)

    def pop(self):
        decorated = heapq.heappop(self.heap)
        return decorated[1]

    def pushpop(self, item):
        decorated = self.key(item), item
        dd = heapq.heappushpop(self.heap, decorated)
        return dd[1]

    def replace(self, item):
        decorated = self.key(item), item
        dd = heapq.heapreplace(self.heap, decorated)
        return dd[1]

    def __len__(self):
        return len(self.heap)

请参见https://docs.python.org/2/library/heapq.html ,了解pushpopreplace (以及标准库模块heapq提供的其他辅助功能)之间的区别。

Python带有heapq ,您不必下载它 ,但仍然必须导入

Python几乎没有完全使用import语句就可以使用的数据结构方式。 您是否真的想让您的语言在每个项目的内存和名称空间中都加载其整个标准库?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM