cuốn sách gpt4 ai đã làm

Python heapq: Làm cách nào để sắp xếp vùng heap bằng phần tử thứ n của danh sách danh sách?

In lại Tác giả: Vũ trụ không gian 更新时间:2023-11-04 09:55:51 27 4
mua khóa gpt4 Nike

所以我有列表列表被添加到堆中;例如:

 n = [[1, 5, 93],
[2, 6, 44],
[4, 7, 45],
[6, 3, 12]]

heapq.heapify(n)
in (n)

这根据列表的第一个元素进行比较和排序。

我的问题是,如何对 heapq 进行排序以便它比较每个列表的第三个元素?例如,上面的列表将按以下顺序从 heapq 访问:

[[6, 3, 12],
[2, 6, 44],
[4, 7, 45],
[1, 5, 93]]

câu trả lời hay nhất

đống q Không được hỗ trợ chìa khóa 排序函数,因此您需要操作数据结构。将您的列表映射到 tuple(sort_value, list) 将允许您执行 log(n) 推送和弹出:

 In []:
q = [(x[2], x) for x in n]
heapq.heapify(q)
heapq.heappop(q)

Ngoài[]:
(12, [6, 3, 12])

In []:
l = [2, 5, 1]
heapq.heappush(q, (l[2], l))
heapq.heappop(q)

Ngoài[]:
(1, [2, 5, 1])

或者,定义您自己的 danh sách 并为该列表实现比较函数:

class MyList(list):
def __lt__(self, other):
return self[2] < other[2]

q = [MyList(x) for x in n]

注意:您应该实现其他比较函数(请参阅 functools.total_ordering 了解如何轻松实现)。

关于Python heapq : How do I sort the heap using nth element of the list of lists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892736/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress