2016-03-26 2 views
1
a=[1,10] 
b=[2,20] 
h=[] 
heapq.heappush(h,a) 
heapq.heappush(h,b) 
a[0]=5 
heapq.heappop(h) 

хлопки [5,10], а не [2,20]вороха со списками в Python

Если я использовал heapq.heapify (h), прежде чем выскакивать, это дает правильный ответ: то есть [2 , 20] Всегда ли нужно изнашивать список перед появлением, если вы изменили какие-либо значения в списке?

ответ

1

При использовании heapq, list.sort() или любой другой модуль сортировки, как sortedcontainers, изменяя изменяемый элемент, такой как список будет вызывать внутреннюю сортировку быть нарушена. Рекомендуется использовать кортежи в этом случае, так как это предотвратит случайное повреждение сортировки.

При использовании heapq или bisect модуль считает, что список уже отсортирован, а используемый алгоритм работает только в отсортированных списках. Изменение отсортированного списка приведет к разрыву алгоритма и приведет к неожиданным результатам.

Если вы изменяете изменяемый объект, вы должны повторно отсортировать список, если хотите, чтобы он функционировал правильно. heapq.heapify() действительно способ сортировки, если вы используете heapq.

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