python - `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
使用<=
和<=
使用元组上的字典排序。但以防万一这些推论中的任何一个遗漏了我应该注意的东西,我想问一下。
解决方案
是的,顺序将基于您称为“字典排序”的复杂类型的元组。根据PriorityQueue上的文档,
首先检索最低值的条目(最低值的条目是
sorted(list(entries))[0])
.
和排序,特别是list.sort()和sorted(),保证是stable。
推荐阅读
- javascript - 从第二次获取 fetch 结果
- fortran - Fortran中的可变长度参数列表?
- java - 通过 XQuery 和 Saxon 加载外部 java 函数
- dictionary - 带有 xor/xnor 的 Python Sympy bool_map 错误?
- android - 谷歌备份传输安全
- python - 如何在 Python 中重新匹配或重新搜索数字
- r - R中的Xpath表达式给出与chrome检查器不同的结果
- javascript - 如何在空手道框架中使用“faker”库?
- scala - 具有可变默认值的可变 HashMap 不会保留更改
- javascript - 针对文件夹检查变量(字符串)以查看文件是否存在