"Priority stack"(优先级队列和堆栈的混合体)在 Python 3?

"Priority stack" (a hybrid of priority queue and stack) in Python 3?

我在 Python 3.

中需要 "priority stack" 数据结构(如优先级队列,但更像 LIFE,如堆栈)

我知道 queue.PriorityQueue 但没有发现 queue.PriorityStack.

执行此操作的最简单方法是创建一个对象,其中包含您要插入的实际数据以及每次插入时递增的序列号。所以你有一个看起来像这样的对象:

queueObject
    actual_data
    sequence_number
    priority

当你想把东西插入优先级队列时,你用一个新的序列号创建这个对象。类似于:

function insert(data, priority)
    obj = new queuedObject(data, priority, ++globalSequence)
    pq.insert(obj)

有了它和自定义比较器,您可以只使用标准 Python heapq 对象。只要确保比较器比较优先级和序列号即可。

如果愿意,您可以使用时间戳代替序列号。无论哪种方式,假设您的比较器是正确的,这将确保具有相同优先级的项目按 LIFO 顺序出队。