【问题标题】:Priority function for Priority Queue in PythonPython中优先级队列的优先级函数
【发布时间】:2013-01-28 23:32:04
【问题描述】:

如何在 Python 中编写以下 Java PriorityQueue?

PriorityQueue<Integer[]> pq = new PriorityQueue<Integer[]>(11,
        new Comparator<Integer[]>() {
          public int compare(Integer[] A, Integer[] B) {
            return A[0] < B[0] ? -1 : 1;
          }
        });

我做到了

from Queue import PriorityQueue
def my_method(self):
  pq = # I got stuck here since I need to include "comparator"

我查看了许多示例,例如 Creating a python priority Queue,但它们似乎没有定义 priorty functioncomparator 之类的。

【问题讨论】:

  • 如果 A.pulp == B.pulp,你应该返回 0
  • 这是另一个可悲的否决票吗?这是来自那个回复被否决的人,所以他删除了他的回复。我没有对您的回复投反对票——尽管我应该投反对票,因为它已经过时了。

标签: java python-2.7 priority-queue


【解决方案1】:

一种选择是将(A.pulp, A) 作为优先级队列中的值。这样,它将使用元组比较首先比较 pulp 值。

另一种选择是在您的类上实现__cmp__(或定义__lt____eq__ 并使用functools.total_ordering)来进行必要的比较。这假设您还没有其他比较功能。

【讨论】:

  • 您能否展示一个示例或链接,说明我将如何使用比较函数编写 PriorityQueue?
  • 在第二种情况下,您将使用比较函数编写类。
  • 如果A 实际上是一个列表,而A.pulp 是列表的第一个元素,就像A=[5,1,7,9,2] 一样。 pq.put(A[0],A) 应该如何工作?它似乎对我不起作用。
  • 放一个元组:pq.put((A[0], A))
  • 而不是(A.pulp, A) 真正起作用的是([A.pulp, A])
猜你喜欢
  • 2013-02-13
  • 2011-12-20
  • 1970-01-01
  • 2016-09-23
  • 2023-04-02
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多