【问题标题】:Adding Items into Priority Queue将项目添加到优先队列
【发布时间】:2014-04-23 04:53:00
【问题描述】:

Python 中 Queue.PriorityQueue 类的文档如下所示:

https://docs.python.org/2/library/queue.html#Queue.PriorityQueue

它说,“条目的典型模式是以下形式的元组:(priority_number, data)”

但是,当我尝试将基本数据输入优先级队列时,我得到:

from Queue import PriorityQueue
pq = PriorityQueue()
pq.put(1, "one")
pq.put(2, "two")
pq.put(3, "three")
pq.get()
1
pq.get()
2
pq.get()
3

pq.put()中的第一个值不是优先级,第二个值是数据吗?这似乎是颠倒过来的。然后当我尝试输入(数据,优先级)时,我得到:

from Queue import PriorityQueue
pq = PriorityQueue()
pq.put("two", 4)
pq.put("one", 2)
pq.put("three", 6)
pq.get()
'one'
pq.get()
'three'
pq.get()
'two'

这顺序不正确,因为它应该输出“一、二、三” 有什么想法吗?

【问题讨论】:

标签: python priority-queue


【解决方案1】:

第一个值是优先级。最低优先级首先从队列中出来,所以你的第一个例子是有意义的。第二个例子也是正确的,因为按字母顺序"one" < "three" < "two"。它将您的字符串视为优先级并按它们排序。正如它在您链接的页面上所说:

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

您可能还想将元组放入队列中,我不确定,例如

pq.put((1, "some data"))
pq.put((2, "some lower priority data"))

【讨论】:

  • 哦,好吧,我想我明白了,“一”和“二”字符串也在:pq.put(1, "one"), pq.put(2, "two")被完全忽略?我认为优先级编号是被忽略的,而 pq.get() 只返回数据
  • 是的,我认为“一”和“二”字符串会被忽略。任何对象都可以放入队列,get 方法使用它们的自然排序顺序返回队列中的对象。 PriorityQueue 类本身并不知道“优先级”;你用 (priority, data) 元组模拟那些。这里有用的例子:my.safaribooksonline.com/book/programming/python/9780132778633/…
  • 我认为您传递给put 的第二个参数被解释为可选参数block(被评估为真)。
  • 如果此答案满足您的需求,请考虑通过单击复选标记按钮接受它。
  • 元组优先级队列运行良好。但是我需要确保出列具有相同优先级的元组,例如(1,“一些数据”,(1,“其他数据”)每次都会以相同的顺序执行。你知道是否有相同优先级的元组的决胜局吗?我在 python 中运行了一些测试,似乎就像决胜局一样是先进先出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 2012-02-24
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多