python - 如果多个元素具有相同的优先级,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
解决方案
如果您真的需要这种排序,解决它的最简单方法是在您的元组中添加一个新的第二个元素,当两个元组中的第一个元素相同时,该元素将用于打破平局。
对于 LIFO 排序,您使用每次插入时递减的计数器。然后你的元素变成:
q.put((1, 0, 'first_in'))
q.put((1, -1, 'last_in'))
q.put((2, -2, 'not_to_be_returned'))
推荐阅读
- php - Symfony 4以表单类型获取当前用户?
- digital-ocean - rclone 将文件夹移动到 digitalocean 空间中的文件夹
- grep - SH grep 仅输出某些字符串
- javascript - 在 2 个不同的组件 Angular 之间显示和隐藏
- api - Basecamp 3 API:如何获取授权用户创建的评论?
- mysql - 根据与前一天数据的差异获得前 5 个结果
- javascript - 当按钮类发生变化时,jQuery调用不同的函数
- javascript - 通过 expo 构建 apk 未安装在 android 上
- android-studio - Android Studio:“设备当前处于未知状态”
- facebook - 如何使用 Facebook API 在 1 个请求中获取多个头像