2016-09-25 2 views
1

Я пытаюсь использовать модуль Python heapq в моей программе, но я столкнулся с странной проблемой, используя heapq.heappop(). Функция не возвращает наименьший элемент в куче. Взгляните на следующий код:Python: heapq.heappop() дает странный результат

Python 2.7.12 (default, Jul 1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import heapq 
>>> list = [[1326, 'a'], [654, 'b']] 
>>> print heapq.heappop(list) 
[1326, 'a'] 
>>> print heapq.heappop(list) 
[654, 'b'] 

heappop() Если не возвращать [654, 'b'] первый, а затем [1326, 'a']?

ответ

1

Вы должны "heapify" список первый (операция на месте):

In [1]: import heapq 

In [2]: l = [[1326, 'a'], [654, 'b']] 

In [3]: heapq.heapify(l) 

In [4]: heapq.heappop(l) 
Out[4]: [654, 'b'] 

In [5]: heapq.heappop(l) 
Out[5]: [1326, 'a'] 

И, избегать имен списка, как list - вы затенения встроенного list ключевого слова.

+0

Спасибо, это действительно проблема для приведенного выше примера. Для моего кода я обнаружил, что каждый раз, когда я редактировал кучу, мне нужно снова использовать функцию sort() (глупо меня). – jpaulus

Смежные вопросы