2017-07-17 6 views
6
の配列のためのヒープキーを定義

python heap implementationの使用のための簡単な例は、より複雑なシナリオではタプル

>>> from heapq import heappush, heappop 
>>> heap = [] 
>>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] 
>>> for item in data: 
     heappush(heap, item) 

ですが、私は

tuples = [(5,"foo",True),(2,"bar", False),(8,"foobar",True)] 

のようなタプルの配列を持っているとします各タプルの最初のエントリをヒープキーとして使用します。つまり、タプルはヒープによってタプル内の番号に従ってソートされます。

どうすればいいですか?

答えて

4

タプルはそのまま使用できます。このような用途のPython documentation explicitly makes note

ヒープ要素にはタプルを使用できます。

>>> h = [] 
>>> heappush(h, (5, 'write code')) 
>>> heappush(h, (7, 'release product')) 
>>> heappush(h, (1, 'write spec')) 
>>> heappush(h, (3, 'create tests')) 
>>> heappop(h) 
(1, 'write spec') 

は単にヒープにタプルを押して、必要なときにそれらをオフポップ:これは、追跡されているメインレコードと一緒に(例えば、タスクの優先度など)比較値を割り当てるために有用である

>>> from heapq import heappush, heappop 
>>> 
>>> heap = [] 
>>> tuples = [(5,"foo",True),(2,"bar", False),(8,"foobar",True)] 
>>> 
>>> for tup in tuples: 
...  heappush(heap, tup) 
... 
>>> heappop(heap) 
(2, 'bar', False) 

the implementation for heapはタプル

while pos > startpos: 
    ... 
    if newitem < parent: 
     ... 
    ... 
... 

のためのデフォルトのソートを使用し、Pythonはタプルの要素単位をソートし、ENのでタプルをソートするオブジェクトが最初に来るようにしてください。