Java Comp的Python等价物

2024-05-02 17:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一些对象插入优先级队列。我没有实现任何比较类的对象的方法,因为有很多方法可以对对象进行排序。在

我看到的一种方法是将对象作为元组插入PriorityQueue中(目标财产,目标)。对我来说,这种方法的问题是目标财产对于多个对象通常是相同的,所以我得到一个TypeError,因为对象是无序类型。在

我想做的是告诉优先级队列进行排序目标财产如果它们的属性是相同的,我就不关心对象的顺序了。在

最好的办法是什么?在


Tags: 对象方法类型目标属性排序队列顺序
2条回答

根据docs

The lowest valued entries are retrieved first (the lowest valued entry is the one returned by sorted(list(entries))[0]). A typical pattern for entries is a tuple in the form: (priority_number, data).

更新:

可以创建三元组以避免重复,如下所示:

>>> import queue
>>> class Foo(object):
...     def __init__(self, bar):
...         self.bar = bar
...
>>> f1 = Foo('foo')
>>> f2 = Foo('bar')
>>> f3 = Foo('baz')
>>> f4 = Foo('bar')
>>> q = queue.PriorityQueue()
>>> q.put((5,0,f1))
>>> q.put((3,0,f2))
>>> q.put((3,1,f3))
>>> q.put((1,0,f4))

或者(可能更干净),实现magic methods

^{pr2}$

创建自定义类并实现适当的dunder method

相关问题 更多 >