heapqとdoctest
昨日話を聞いたのでちょっと試してみた。
http://www.python.jp/doc/release/lib/module-heapq.htmlこの辺参考に。
>>> from heapq import heappush, heappop >>> heap = [] >>> data = [8, 3, 5, 9, 7, 1, 4] >>> for item in data: ... heappush(heap,item) ... >>> print heap [1, 7, 3, 9, 8, 5, 4] >>> sorted = [] >>> while heap: ... sorted.append(heappop(heap)) ... >>> print sorted [1, 3, 4, 5, 7, 8, 9] >>> data.sort() >>> print data == sorted True >>> for item in data: ... heappush(heap,item) ... >>> print heap [1, 3, 4, 5, 7, 8, 9] >>> heappop(heap) 1 >>> print heap [3, 5, 4, 9, 7, 8] >>> heappop(heap) 3 >>> print heap [4, 5, 8, 9, 7]
んー、一個取り出す度にヒープを再構成してて結構時間かかりそうな気が。って空いたとこに子のデータ入れるだけだからそうでもないか。
ついでに上の奴のdostest。ほとんどコピペ。
#!/usr/bin/env python """ >>> from heapq import heappush, heappop >>> heap = [] >>> data = [8, 3, 5, 9, 7, 1, 4] >>> for item in data: ... heappush(heap,item) ... >>> print heap [1, 7, 3, 9, 8, 5, 4] >>> sorted = [] >>> while heap: ... sorted.append(heappop(heap)) ... >>> print sorted [1, 3, 4, 5, 7, 8, 9] >>> data.sort() >>> print data == sorted True """ def _test(): import doctest doctest.testmod() if __name__ == "__main__": _test()
これで$ python hoge.pyとかやっても何も出力されない。 一方でTrueと書かれたとこをFalseに変えると
********************************************************************** File "hoge.py", line 19, in __main__ Failed example: print data == sorted Expected: False Got: True ********************************************************************** 1 items had failures: 1 of 10 in __main__ ***Test Failed*** 1 failures.
って感じにテストが失敗したと出力される。
・・テスト成功したときにメッセージ出さないんですか、これ?