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
将具有您想要的顺序。
内置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
将具有您想要的顺序。