python - Python3 中的 Heapq 不能使用元组,因为它没有按期望顺序弹出
问题描述
每个人都说如果你将元组推入heapq
,它将把第一个参数作为比较因素。
但事实并非如此!我很好奇我的代码有什么问题?
for task_name, counter in tasks_counter.items():
heappush(tasks_q, (-int(counter), task_name, counter))
heapify(tasks_q)
while tasks_q:
print(tasks_q.pop())
输出
(-1, 'G', 1)
(-1, 'F', 1)
(-1, 'E', 1)
(-1, 'D', 1)
(-1, 'C', 1)
(-1, 'B', 1)
(-6, 'A', 6)
我想我应该先拿到有价值的物品A
,对吧?但事实并非如此。
在 Python 中使用内置优先级队列的任何替代解决方案?
另一个例子的输出。
解决方案
您正在使用 的pop
功能list
。您需要改用heapq.heappop
函数。它将调整列表以在此过程中保持堆不变。请参阅基本示例。
heapify
如果您开始[]
并heappush
重复 调用,也没有必要调用。heappush
已经确保保持堆不变式。
推荐阅读
- python - 如何从python中的文件中以特定顺序获取输入
- karate - 可以将每个场景的相同断言放在单独的文件中以避免空手道重复?
- testing - 如何测试使用 React 测试库安装后立即卸载的组件?
- javascript - Element-ui 视图无法在插槽区域立即更新
- robots.txt - 在谷歌搜索,网站没有显示任何描述?
- android - ReactNative:未捕获的类型错误:在构建 KitchenSink 演示时无法读取未定义的属性“forEach”
- html - 为什么我的边框图像在 IE11 中不起作用?
- android - 数据没有被推送到android studio中的firebase
- tizen - 使用合作伙伴级别证书将应用程序安装到三星 Tizen 电视
- python - 将多个文本条目添加到 Python 中的特定代码行