küpe

2017-07-17 14 views
6
bir dizi için yığın anahtarı tanımlayın

python heap implementation kullanımına ilişkin basit bir örnek daha karmaşık bir senaryodaküpe

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

, ben

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

gibi dizilerini dizisi var ve istediğiniz her bir tuple'ın ilk girişini yığın anahtar olarak kullanmak için, yani tupller yığın tarafından sayılar içindeki sayıya göre sıralanmalıdır.

Bunu nasıl yapabilirim?

cevap

4

Tetikleri oldukları gibi kullanabilirsiniz. Python documentation explicitly makes note gibi bir kullanım:

Yığın elemanları tuple olabilir.

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

Basitçe yığınına dizilerini itin ve gerektiğinde topunu: Bu izleniyor ana kaydın yanında (örneğin görev öncelikleri gibi) karşılaştırma değerleri atamak için yararlıdır

>>> 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 Çünkü

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

ve Python tuples öğeye göre sıralar tr küpe için sıralama varsayılan kullanır Tuplların sıralanmasını istediğiniz nesnelerin ilk önce geldiğinden emin olun.