1. ホーム
  2. python

[解決済み] python, heapq: heappushpop() と heapreplace() の違い。

2022-02-18 14:41:47

質問

以下のコードを試したところ、heapq.heappushpop()とheapq.heapreplace()関数の違い(push/pop動作の規則性以外)が分かりませんでした。

>>> from heapq import *
>>> a=[2,7,4,0,8,12,14,13,10,3,4]
>>> heapify(a)
>>> heappush(a,9)
>>> a
[0, 2, 4, 7, 3, 9, 14, 13, 10, 8, 4, 12]
>>> heappop(a)
0
>>> b=a.copy()
>>> heappushpop(a,6)
2
>>> heapreplace(b,6)
2
>>> a
[3, 4, 4, 7, 6, 9, 14, 13, 10, 8, 12]
>>> b
[3, 4, 4, 7, 6, 9, 14, 13, 10, 8, 12]

解決方法は?

heapreplace(a, x) に元々あった最小の値を返します。 a の値に関係なく x , 一方、その名の通り heappushpop(a, x) プッシュ xa は最小の値をポップします。 あなたのデータを使って、その違いを示すシーケンスを示します。

>>> from heapq import *
>>> a = [2,7,4,0,8,12,14,13,10,3,4]
>>> heapify(a)
>>> b = a[:]
>>> heappushpop(a, -1)
-1
>>> heapreplace(b, -1)
0