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 numpy:为3个其他列的每个唯一元组有效地获取包含min值的行