【发布时间】:2021-06-01 12:56:47
【问题描述】:
我正在使用 Python 的 Queue.PriorityQueue(在 A* 算法的实现中,虽然我不确定这是否相关)。我用它来保存不可比较的对象(由教授提供的我无法修改的对象类),当 Python 尝试添加优先级对象元组(例如pq.put(1, object))时会抛出错误它已经持有一个具有相同优先级的元组。
这是错误的相关部分:
File "pathfinding.py", line 192, in astar
frontier.put((priority, neighbor))
File "/usr/lib/python3.7/queue.py", line 149, in put
self._put(item)
File "/usr/lib/python3.7/queue.py", line 233, in _put
heappush(self.queue, item)
TypeError: '<' not supported between instances of 'InfNode' and 'InfNode'
基本上,我正在寻找一种绕过 PriorityQueue 尝试比较这两个对象的方法。相同优先级的对象排序的确切顺序对我来说完全不重要。
我确实找到了this solution,但它不使用 PriorityQueue,所以我不确定我是否可以做类似的事情,或者这是否完全不可能(在这种情况下我将不得不修改我的算法是这样的,这是不可取的。)。
【问题讨论】:
-
queue.PriorityQueue是一个糟糕的选择,顺便说一下 - 它被设计为线程间消息传递系统,而不是通用堆。此外,它不支持减少键,这对于良好的 A* 实现很重要。 -
另外,“我确实找到了这个解决方案,但它不使用 PriorityQueue” - 确实如此!你在说什么?
-
以“如果数据元素不可比较”开头的文档建议有什么问题?
-
@user2357112supportsMonica 啊,如果是这种情况,你认为我应该改用什么数据结构?就像我之前说的,我真的对python一无所知。
-
@user2357112supportsMonica 哦哦哦我链接了错误的答案!对于那个很抱歉。我会解决的
标签: python priority-queue