Python PriorityQueue 仅获取元组的一部分

Posted

技术标签:

【中文标题】Python PriorityQueue 仅获取元组的一部分【英文标题】:Python PriorityQueue gets only part of tuple 【发布时间】:2021-07-25 04:09:11 【问题描述】:

我在 Python 中遇到了优先级队列问题。我放入了一个元组,当我迭代它时,我得到了迭代的元组。我想要并期望发生的是 get() 函数只会返回整个元组,而不仅仅是第一个元组的第一个值。

加入队列:

await priority_queue.put((3, 'Value1', 'Value2'))

队列迭代:

for i in await priority_queue.get():
    print(i)

我得到的结果:

> 3
> 'Value1'
> 'Value2'

我想要的结果:

> (3, 'Value1', 'Value2')

根据docs

首先检索最低值的条目(最低值的条目是 sorted(list(entries))[0] 返回的条目)。条目的典型模式是以下形式的元组:(priority_number, data)。

这让我觉得有些地方不对劲,虽然除了排序之外我不完全理解这里的意思。

【问题讨论】:

您的思维方式错误print(priority_queue.get()) 这将打印您想要的内容。您编写的代码正在迭代您插入的元组而不是优先级队列 @deadshot 是的,这就是问题所在。谢谢! 【参考方案1】:

问题在于我是如何考虑排队的。 (感谢@deadshot)

print(priority_queue.get())

如果您只想要队列中的第一个对象,则无需迭代。

while not priority_queue.empty():
    print(await priority_queue.get())

是一个单独遍历每个对象的好方法。 (也允许在其他地方更好地循环)

【讨论】:

以上是关于Python PriorityQueue 仅获取元组的一部分的主要内容,如果未能解决你的问题,请参考以下文章

Python 线程优先队列 PriorityQueue

Python PriorityQueue 顺序

Python numpy:为3个其他列的每个唯一元组有效地获取包含min值的行

Python 优先级队列PriorityQueue 用法示例

港中文最新《多模态元学习》综述

清华大学:2021 元宇宙研究报告!