Heapq模块在heappop

时间:2016-06-27 09:53:13

标签: python python-3.x

我正在玩heapq模块,并且遇到了尴尬的行为,尽管我只使用修改它的内置函数。我创建了一个示例来显示行为。我的Python版本是3.5.1+。在样本中,我期望最终输出中有6个元素,但不知何故它会丢失其中的3个元素。

from heapq import *

h = []
heappush(h, 1000000000)
heappush(h, 100000000)
heappush(h, 10000000)
heappush(h, 1000000)
heappush(h, 100000)
heappush(h, 10000)

print(h)
print(len(h))

sorted = [heappop(h) for x in h]
print(sorted)

控制台上的输出:

$ python3 heapq_sample.py
[10000, 1000000, 100000, 1000000000, 10000000, 100000000]
6
[10000, 100000, 1000000]

任何人都可以识别问题或解释行为吗?

1 个答案:

答案 0 :(得分:1)

我现在自己想出了问题,想要解释一下。该问题与heapq模块无关,而是在迭代时修改列表。使用heappop函数,我们从列表中删除第一个元素并返回它。我在列表中显示了它的影响,并将迭代中的当前元素标记为粗体:

  • 迭代1:

    [ 10000 ,1000000,100000,1000000000,10000000,100000000]

  • 迭代2

    [1000000, 100000 ,1000000000,10000000,1000000]

  • 迭代3

    [1000000,1000000000, 10000000 ,100000000]

在迭代3中弹出另一个元素,并且python想要在“迭代4”中跳转到列表中的第4个元素,这个元素不再被给出,这就是为什么它会引发StopIteration。