2017-07-17 11 views
6

Prosty przykład za korzystanie z python heap implementation jestDefiniowanie klawisza sterty dla tablicy krotki

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

W bardziej skomplikowanym scenariuszu Mam tablicę krotek jak

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

i chcą aby użyć pierwszego wpisu każdej krotki jako klucza sterty, tzn. krotki powinny być posortowane zgodnie z liczbą w krotkach obok sterty.

Jak mogę to zrobić?

Odpowiedz

4

Możesz po prostu użyć krotki, jaka jest. Python documentation explicitly makes note takich jak użycie:

Elementy sterty mogą być krotkami. Funkcja ta jest przydatna do przypisywania wartości porównanie (takich jak priorytety zadań) obok głównego rekordu śledzona:

>>> 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') 

Wystarczy nacisnąć krotki do sterty, i pop je, gdy są potrzebne:

>>> 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) 

Ponieważ the implementation for heap używa domyślnego sortowania za krotki

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

i Python sortuje krotki element mądry, pl Upewnij się, że obiekty, według których mają być sortowane krotki, są na pierwszym miejscu.

Powiązane problemy