Heapify 列表基于 python 中对的第二个元素

Heapify list based on 2nd element of pair in python

内置python函数

heaps.heapify(x) 

将堆化列表 x。现在,如果列表的元素成对出现,此函数将根据每对 (a,b) 的第一个元素(即 a.如果我想根据对的第二个元素(即 b)堆化列表怎么办? 有什么内置的方法可以根据列表的第二个元素堆化列表吗?

x = [(1,2), (2,1), (3,4), (4,3), (5,6), (1,4), (4,2), (2,5)]

现在 heapq.heapify(x) 的输出将是

>>> [(1,2), (1,4), (2,1), (2,5), (3,4), (4,3), (4,2), (5,6)]

以上是成对弹出的顺序 list.How 我可以堆化列表以便堆化函数的输出是这样的:-

>>> [(2,1), (1,2), (4,2), (4,3), (3,4), (1,4), (2,5), (5,6)]

我知道这可以通过在每对中以相反的顺序写入元素来获得,但我想知道在 python.

中是否有一些内置的方法可以做到这一点

您可以按任意顺序将每个元素追加到堆中。堆将它们识别为 (num1, num2),其中 num1 用于排名。下面是一个选项:

hp = []
for e in x:
    hp.append((e[1], e[0]))

heapq.heapify(hp)
new = []
while hp:
    y = heapq.heappop(hp)
    new.append([y[1], y[0]])
print(new)

数组 new 将具有您想要的顺序。