所以我将列表添加到堆中;例如:
n = [[1, 5, 93],
[2, 6, 44],
[4, 7, 45],
[6, 3, 12]]
heapq.heapify(n)
print(n)
根据列表的第一个元素进行比较和排序。
我的问题是,如何对heapq进行排序,以便比较每个列表的第三个元素?例如,将按以下顺序从heapq访问上面的列表:
[[6, 3, 12],
[2, 6, 44],
[4, 7, 45],
[1, 5, 93]]
答案 0 :(得分:4)
heapq
不支持key
函数进行排序,因此您需要操作数据结构。将您的列表映射到tuple(sort_value, list)
将允许您执行log(n)
推送和弹出:
In []:
q = [(x[2], x) for x in n]
heapq.heapify(q)
heapq.heappop(q)
Out[]:
(12, [6, 3, 12])
In []:
l = [2, 5, 1]
heapq.heappush(q, (l[2], l))
heapq.heappop(q)
Out[]:
(1, [2, 5, 1])
或者,定义您自己的list
并实现该列表的比较函数:
class MyList(list):
def __lt__(self, other):
return self[2] < other[2]
q = [MyList(x) for x in n]
注意:您应该实现其他比较功能(有关如何轻松完成此操作,请参阅functools.total_ordering
。)