2011-09-19 58 views
3

heapify返回NoneType

b = heapify([5,4,9,1]) 

,如果我做了

type(b) 

它说,它是不是列表类型NoneType,任何人都知道我在做什么错?

+0

使用'l'作为变量名通常被认为是不好的样式,因为根据字体它很容易被误认为是'1'或'I'。 – agf

回答

5

heapify()方法就地转换列表。这意味着它会改变列表,但不会返回修改后的列表。正如下文所述,heapify()返回None以保护您免受此错误。因此,如果你做

lst = [5,4,9,1] 
heapify(lst) 
type(lst) 

,你会看到lst现在heapified。有关更多信息,请参阅library reference

+2

值得补充的是,所有(或者几乎所有)采取行动的Python方法都会返回None,所以当你不打算的时候,你不会意外地使用就地方法。 – agf

+0

Alex Martelli自己在这里解释得很好:http://stackoverflow.com/questions/1682567/why-does-pythons-list-append-evaluate-to-false – steveha

+0

你会从每一个没有'明确地返回一个值。例如'def f():pass'。 – etuardu

1

heapify改变传递给它的列表;就像l.sort()一样。

>>> import heapq 
>>> l = [9, 8, 7, 6] 
>>> heapq.heapify(l) 
>>> l 
[6, 8, 7, 9]