“ PriorityQueue”是否尊重元组的顺序?

时间:2019-06-06 17:04:46

标签: python sorting priority-queue

我需要维护一些数据的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使用<=<=使用元组的字典排序。但是,以防万一这些推论中的任何一项都缺少我应该意识到的东西,我想问一下。

1 个答案:

答案 0 :(得分:0)

是的,顺序将基于您称为“字典顺序”的元组的complex sort。根据{{​​3}}上的文档,

  

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

并保证排序,尤其是PriorityQueuelist.sort()sorted()