首页 > 解决方案 > `PriorityQueue` 是否尊重元组的顺序?

问题描述

我需要用一些数据维护一个 PriorityQueue。数据的顺序不是我想要在 PriorityQueue 中维护的顺序(两种不同的顺序服务于不同的目的)。实际上,我想要队列中元素的顺序是由三个函数决定的:

1)评分功能A。

2)评分功能B。

3) 元素加入队列的顺序。

我为了保持队列的顺序,我写了如下内容:

import queue
s = State(...)
id = s.immutableID
pq = queue.PriorityQueue()
counter = 0

priority = (A(s), B(s), counter)

pq.put( (priority, id) )
counter += 1

这显示了试图让 PriorityQueue 保持我想要的顺序背后的粗略策略。稍后在代码中,我创建了几个 的新实例State,对它们的优先级进行评分,增加计数器,然后循环。

如果我这样做,它基本上会在元组上使用“字典排序”吗?也就是说,PriorityQueue是否会判断所有第一个坐标在前的元素都被最早插入,而在关系中,所有第二个坐标在前的元素都被最早插入,以此类推?

我很确定基于文档的答案是“是”,因为它使用sort函数并sort使用<=<=使用元组上的字典排序。但以防万一这些推论中的任何一个遗漏了我应该注意的东西,我想问一下。

标签: pythonsortingpriority-queue

解决方案


是的,顺序将基于您称为“字典排序”的复杂类型的元组。根据PriorityQueue上的文档,

首先检索最低值的条目(最低值的条目是sorted(list(entries))[0]).

和排序,特别是list.sort()sorted(),保证是stable


推荐阅读