python 代码疑惑
import heapqclass PriorityQueue:
def __init__(self):
self._queue = []
self._index = 0
def push(self, item, priority):
heapq.heappush(self._queue, (-priority, self._index, item))
self._index += 1
def pop(self):
return heapq.heappop(self._queue)[-1]
问题1:代码最后的[-1]是干什么的,我把-1改成2,结果好像没变化
问题2:我上传的图中的q._queue的排序好像没什么规律,我看python关于heapq官方文档,应该从小到大排列吧?
本帖最后由 fall_bernana 于 2020-9-14 17:30 编辑
李万金 发表于 2020-9-14 15:56
问题1能否深入讲讲,改-1为2为什么结果没变
问题二的二叉树排列是完美二叉树吗
题1能否深入讲讲,改-1为2为什么结果没变
heapq里你存放的是一个一个的tuple。比如(-5,1,Item('bar')).你每次heappop出来一个。然后你用下标取-1是最后一个,2在这里也是最后一个值。
问题二的二叉树排列是完美二叉树吗
不是。他只是保证根节点总是最小的。
h=
0
1 3
5 1 6 7
109 4 2
------------------------------------ 本帖最后由 LuLD 于 2020-9-14 10:24 编辑
数组 列表 的 下标
>>> a =
>>> a[-1]
5
>>> a
3
return heapq.heappop(self._queue)[-1]
heapq.heappop(self._queue) 看成一个 数组名( 呃 列表 )
[-1] 是取 一个数组 (列表)的最后一个值
return heapq.heappop(self._queue)[-1] 返回 heapq.heappop(self._queue) 数组(列表)的最后一个值
不会排列数组,只是显示 数组的下标的
以上为个人理解,仅供参考 楼上正解 问题1:代码最后的[-1]是干什么的,我把-1改成2,结果好像没变化
heapq.heappop(self._queue)指的是(-priority, self._index, item) ,-1和2都是 item的值
问题2:我上传的图中的q._queue的排序好像没什么规律,我看python关于heapq官方文档,应该从小到大排列吧?
q._queue是个二叉树排列,不是按按大小顺序排列 q._queue并不是从小到大排序,只是保证每次heappop()出的都是最小的元素 fall_bernana 发表于 2020-9-14 10:20
问题1:代码最后的[-1]是干什么的,我把-1改成2,结果好像没变化
heapq.heappop(self._queue)指的是(-prio ...
问题1能否深入讲讲,改-1为2为什么结果没变
问题二的二叉树排列是完美二叉树吗
页:
[1]