所以,我有一个类。我想要两个优先级队列的数据类型,以及一个类型对象的优先级队列。但是,我想在 上订购其中一个,并在 上订购另一个。现在,不支持关键功能,所以我采取了以下措施:PPPP.xP.yqueue.PriorityQueue.put()class P: ... def __lt__(self, other): return self.y < other.y ...但是,这不允许基于进行排序,同时,我想偷看其中一个队列而不是另一个队列,并且没有函数。因此,我用排序列表替换了其中一个优先级队列。我无法使用该库,因为这是用于家庭作业的,我不能保证评分服务器已安装它,因此我转向使用.P.xqueue.PriorityQueuepeekSortedContainersbisect.insort然而,唯一的问题是它也不支持关键功能。因此,我必须编写自己的函数来完成此任务,然后用 .这感觉就像一个黑客,因为我正在编写自己的二进制插入函数,而二进制插入是一个核心的计算机科学概念,这之前一定已经出现过。bisect.insortbinary_insert(lst, item, key)binary_insert(lst, item, key = lambda i: i.x)一种方法是使用形式的列表存储元组,并具有表单的优先级队列存储元组。但是,有没有其他方法可以将这些属性内化到自身中?否则,每次弹出项目时,我都必须解压缩元组,这可能会导致我的程序充斥着未使用的变量。(x, p)(y, p)P
1 回答

慕的地8271018
TA贡献1796条经验 获得超4个赞
也许你可以子类来为你做元组,像这样的东西(完全未经测试的代码):PriorityQueue
class MyPriorityQueue(PriorityQueue):
def _put(self, item):
super()._put((item.x, item))
def _get(self):
return super()._get()[1]
添加回答
举报
0/150
提交
取消