Python 使用队列中最后添加的元素进行排序

实际上我的排序算法有效,但有一个问题。我有一个名为 SortedItem 的类,其中包括


def __init__(self, point, cost):

    self.coordinate = point

    self.cost = cost

我还有优先级队列,它按成本对这个 SortedItem 进行排序:


class PriorityQueue:


def __init__(self):

    self.items = []


def isEmpty(self):

    return self.items == []


def sortComparatorByCost(self, item):

    return item.cost


def enqueue(self, item):

    self.items.append(item)

    self.items.sort(key=self.sortComparatorByCost, reverse=True)



def dequeue(self):

    return self.items.pop()


def returnQueueAsString(self):

    queue_str = ""

    for eachItem in self.items:

        queue_str += str(eachItem) + " "

    return queue_str


def isQueueContainsElement(self, element):

    for eachElement in self.items:

        if eachElement[0] == element:

            return True

    return False

问题出现在这里: - 我已经定义了一些添加队列的顺序。假设我将此对象添加到队列中:


obj1 = SortedItem((1,0), 10))

queue.enqueue(obj1)

obj2 = SortedItem((2,0), 15))

queue.enqueue(obj2)

obj3 = SortedItem((2,1), 15))

queue.enqueue(obj3)

  • 现在我必须按照这个顺序从队列中获取对象(obj1、obj2、obj3)。

  • 然而python内置的sort函数是这样对这些对象进行排序的:(obj1, obj3, obj2)(因为obj2和obj3的开销是一样的)

  • 我该如何解决这个问题。我的意思是如果 2 个对象的成本相同,我应该得到第一个添加的对象。

请注意:我刚刚创建了一个简单的问题示例。如果您尝试此代码,您可能会按以下顺序获得对象:obj1、obj2、obj3


陪伴而非守候
浏览 228回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python