我在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
如果您确实需要这种排序,最简单的解决方法是在元组中添加一个新的2nd元素,当两个元组中的1st元素相同时,该元素将用于打破联系。
对于LIFO订购,您使用每次插入时都会递减的计数器。您的元素将变为:
q.put((1, 0, 'first_in'))
q.put((1, -1, 'last_in'))
q.put((2, -2, 'not_to_be_returned'))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句