是否有一个“问题”;后进先出”;如果有多个元素具有相同的优先级,请在python中键入优先级队列?

是否有一个“问题”;后进先出”;如果有多个元素具有相同的优先级,请在python中键入优先级队列?,python,data-structures,priority-queue,Python,Data Structures,Priority Queue,在python中,优先级队列中有两个具有相同秩的元组。 get方法将采用插入的第一个元素。 如果队列中的两个元素具有相同的优先级,我希望首先返回插入的最后一个元素: #python 3.7 import queue q= queue.PriorityQueue() q.put((1, 'first_in')) q.put((1, 'last_in')) q.put((2, 'not_to_be_returned')) for i in range(q.qsize()): print(q

在python中,优先级队列中有两个具有相同秩的元组。 get方法将采用插入的第一个元素。 如果队列中的两个元素具有相同的优先级,我希望首先返回插入的最后一个元素:

#python 3.7
import queue
q= queue.PriorityQueue()
q.put((1, 'first_in'))
q.put((1, 'last_in'))
q.put((2, 'not_to_be_returned'))

for i in range(q.qsize()):
    print(q.get(i))

#Returns
(1, 'first_in')
(1, 'last_in')
(2, 'not_to_be_returned')

#looking for : 
(1, 'last_in') # in case of same rank return the last inserted
(1, 'first_in') 
(2, 'not_to_be_returned')

#Merci

是的,那将是
queue.LifoQueue
。请参阅。

如果确实需要这种排序,最简单的解决方法是在元组中添加新的第二个元素,当两个元组中的第一个元素相同时,该元素将用于断开连接

对于后进先出排序,您使用一个计数器,每次插入时都会递减。然后,您的元素变成:

q.put((1, 0, 'first_in'))
q.put((1, -1, 'last_in'))
q.put((2, -2, 'not_to_be_returned'))

谢谢,但后进先出队列不是优先级队列。我想先返回优先级最高的项目,然后如果两个项目具有相同的优先级,则执行后进先出选择。@greg,这不是你在问题中所问的。@go2nirvana问题的标题是:“python中是否有“后进先出”类型的优先级队列?”。对不起,我是新手,我只是添加了另一个示例,将代码修改得更为明确。我只是注意到“first_in”首先被抓取,因为first_in按字母顺序排在第一位。q=queue.PriorityQueue()q.put((1,'first_in'))q.put((1,'last_in'))q.put((1,'abcdf')返回(1,'abcdf'),(1,'first_in'),(1,'last_in'))…我们能再加一点吗entry@tessie,感谢您的富有洞察力的通知。的确。完全正确。解释了为什么您不能在基于堆的优先级队列中维护插入顺序,除非您维护有关到达时间的某种信息。