python 中是否有"Lifo"类型的优先级队列,以防多个元素具有相同的优先级?



我在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

如果您真的需要这种排序,最简单的解决方法是向元组中添加一个新的第二个元素,当两个元组中的第一个元素相同时,该元素将用于打破关系。

对于后进先出法订购,您使用一个计数器,每次插入时递减。然后你的元素变成:

q.put((1, 0, 'first_in'))
q.put((1, -1, 'last_in'))
q.put((2, -2, 'not_to_be_returned'))
是的,那就是queue.LifoQueue。请参阅文档。

最新更新