首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,我应该如何在元组列表上实现最小堆?

在python中,我应该如何在元组列表上实现最小堆?
EN

Stack Overflow用户
提问于 2018-08-26 11:40:51
回答 2查看 4.3K关注 0票数 1

我正在尝试在元组列表上实现一个最小堆。例如:

代码语言:javascript
复制
A=[('a',2),('b',1)]

我如何根据这些元组的第二个元素堆积A,以便A将堆积为[('b',1),('a',2)]?(我必须维护一个最小堆。)

EN

回答 2

Stack Overflow用户

发布于 2018-08-28 04:11:52

根据@JimMischel的评论,将您的元组放在一个tuple中,并将优先级作为第一个元素。然后使用heapq

代码语言:javascript
复制
import heapq

list = [('a', 2), ('b', 1), ('c', 0), ('d', 1)]
heap_elts = [(item[1], item) for item in list]
heapq.heapify(heap_elts)  # you specifically asked about heapify, here it is!
while len(heap_elts) > 0:
    print(heapq.heappop(heap_elts)[1])    # element 1 is the original tuple

产生:

代码语言:javascript
复制
('c', 0)
('b', 1)
('d', 1)
('a', 2)
票数 4
EN

Stack Overflow用户

发布于 2020-08-11 16:50:10

代码语言:javascript
复制
import heapq

A=[('a',2),('b',1), ('d', 0), ('c', 2), ('a', 2)]
h = []
for el in A:
    heapq.heappush(h, (el[1], el[0]))

print(h)

结果:

代码语言:javascript
复制
[(0, 'd'), (2, 'a'), (1, 'b'), (2, 'c'), (2, 'a')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52023002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档