首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heapq模块在堆中丢失元素

Heapq模块在堆中丢失元素
EN

Stack Overflow用户
提问于 2016-06-27 09:53:13
回答 1查看 173关注 0票数 0

我在玩heapq模块,并经历了尴尬的行为,虽然我只使用内置的函数修改它。我创建了一个示例来显示这种行为。我的Python版本是3.5.1+。在这个示例中,我希望在最后的输出中有6个元素,但不知怎么的,它失去了其中的3个元素。

代码语言:javascript
复制
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)

控制台上的输出:

代码语言:javascript
复制
$ python3 heapq_sample.py
[10000, 1000000, 100000, 1000000000, 10000000, 100000000]
6
[10000, 100000, 1000000]

有人能识别问题或解释行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 12:41:06

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

  • 迭代1: 10000,1000000,100000,1000000000,10000000,1000000
  • 迭代2 1000000,100000,1000000000,10000000,100000000
  • 迭代3 1000000,1000000000,10000000,100000000

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38050849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档