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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中,我应该如何在元组列表上实现最小堆?相关的知识,希望对你有一定的参考价值。

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

A=[('a',2),('b',1)]

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

答案

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

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

生产:

('c', 0)
('b', 1)
('d', 1)
('a', 2)

以上是关于在python中,我应该如何在元组列表上实现最小堆?的主要内容,如果未能解决你的问题,请参考以下文章

Python:在元组列表和嵌套列表中比较并查找匹配项

python在元组,列表和字典变量前加*的作用

grep或在元组中搜索字符串 - python

Pyspark 在元组列表上设置

在元组列表(SCALA)中将所有具有相同日期的双精度加起来

检查元组是不是出现在元组列表中时出现ValueError