2

我有一个名为 mylist 的列表。如果我进入print mylist我的程序,我可以打印我的列表并查看项目。然后我将列表项转移到堆队列中:

 myheap=heapq.heapify(mylist)
 print myheap

它打印None。怎么了?

4

1 回答 1

10

您未能阅读文档:

heapify(x)

在线性时间内将列表 x 原地转换为堆。

heapify()方法就地转换列表,它不返回新列表。你应该打印mylist

>>> a=[43,12,4,1,5,3,5,3,5,2,64,352,36]
>>> import heapq
>>> heapq.heapify(a)
>>> a
[1, 2, 3, 3, 5, 4, 5, 12, 5, 43, 64, 352, 36]

正如评论中所指出的,这对于 Pythonn API 来说有点奇怪。我不确定,但我想这是为了提高效率。尽管如此,该heapify()函数当然可以只返回输入引用,以使其不那么令人惊讶。

如果 API 是一个构造函数,它像您预期的那样返回一个新构造的对象,那么它很可能会以不同的方式命名,也许:

myheap = heapq.HeapQ(a)  # This is not valid code.

函数的大小写和命名都强烈暗示这不是一个常规的构造函数。

于 2012-10-08T13:11:08.633 回答