[英]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
,除了功能nlargest
和nsmallest
不真的有很多事要做模块的其余部分)。
因此,您可以添加一个键来包装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 ,了解pushpop
和replace
(以及标准库模块heapq
提供的其他辅助功能)之间的区别。
Python带有heapq ,您不必下载它 ,但仍然必须导入 。
Python几乎没有完全使用import
语句就可以使用的数据结构方式。 您是否真的想让您的语言在每个项目的内存和名称空间中都加载其整个标准库?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.