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 に答える