python - 从优先队列中删除一个项目

标签 python data-structures

在 Python 中,heapq模块提供了一个优先级队列。

它有插入和弹出项目的方法。

如何从队列中删除已插入的不是最低优先级的项目?

(也欢迎使用替代的其他集合来执行此操作的替代方法)

最佳答案

heapq 模块使用标准的 Python 列表作为底层数据结构,所以你可以只使用标准的 list 方法 remove()heapify() 在此之后再次。请注意,这需要线性时间。

# Create example data and heapify
a = range(10)
a.reverse()
heapq.heapify(a)
print a

# remove an element and heapify again
a.remove(5)
heapq.heapify(a)
print a

您可以通过使用未记录的函数 heapify._siftup() 再次提高堆化的性能,但整个过程仍然是 O(n),因为 list.remove() 是 O(n)。

关于python - 从优先队列中删除一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484929/

相关文章:

python - 如何在Python中使用当前的Python解释器运行外部Python脚本?

python - Peewee - 在运行时确定有关模型的元数据

python - 在一行中查找所有相同的值并保留另一行的最高绝对值

c - 一个变量只能存储一个值,如何存储多个值?

mysql - 如何将 XML 数据存储到 mysql 数据库中?我不想疯狂地想要外键

c - 访问存储在链表中的结构的属性

Python - Numpy 安装和导入问题

string - S[3i]S[3i + 1]S[3i + 2]的含义

database - 什么情况需要我在数据库中存储相同数据的不同版本?

python - Sympy:在关系上使用逻辑运算符