我正在做一个模拟实验,并试图使我的代码尽可能有效。在一部分中,我使用heapq
模块实现了一个最小堆优先级队列。你知道吗
在整个模拟过程中,我必须用最小的键弹出所有元素。要做到这一点,最简单的方法是:
elements = []
k1, v1 = heapq.heappop(heap)
elements.append((k1,v1))
k2, v2 = heap[0] #looks at the smallest item without popping
while(k1 == k2):
k1, v1 = heapq.heappop(heap)
elements.append((k1,v1))
k2, v2 = heap[0]
return elements
你展示的一般技巧既简单又有效。但你在做一些不必要的额外任务。下面是一个小优化。你知道吗
为了安全起见,您可能应该添加检查以确保堆不是空的。当堆中没有项时检查
heap[0]
是件坏事,如果堆为空则调用heapq.heappop
也是件坏事。你知道吗我打算建议将结构从
(k, v)
堆更改为k
堆和{k:[v]}
字典。这将使您的代码变成:使用:
heappush(heap, (k, v))
会变成:heappop(heap)
将变成:相关问题 更多 >
编程相关推荐