我在玩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]有人能识别问题或解释行为吗?
发布于 2016-06-28 12:41:06
现在我自己解决了这个问题,想给出一个解释。这个问题与heapq模块无关,而是与在迭代列表时修改列表有关。使用堆函数,我们从列表中删除第一个元素并返回它。我正在显示这对列表的影响,并将迭代中的当前元素标记为粗体:
在迭代3中,另一个元素被弹出,python想跳转到列表中的“迭代4”到列表中的第4个元素,这个元素不再给出,这就是为什么它会引发StopIteration。
https://stackoverflow.com/questions/38050849
复制相似问题