微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果多个元素具有相同的优先级,python 中是否有“Lifo”类型的优先级队列?

如何解决如果多个元素具有相同的优先级,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

解决方法

是的,那就是 queue.LifoQueue。见docs

,

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

对于 LIFO 排序,您使用每次插入时递减的计数器。然后你的元素变成:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。