O que é o módulo heapq do Python?
eu tentei"heapq" e cheguei à conclusão de que minhas expectativas diferem do que vejo na tela. Eu preciso de alguém para explicar como funciona e onde pode ser útil.
Do livroMódulo Python da semana sob o parágrafo2.2 Ordenação está escrito
Se você precisar manter uma lista classificada ao adicionar e remover valores, confira o heapq. Usando as funções em heapq para adicionar ou remover itens de uma lista, você pode manter a ordem de classificação da lista com pouca sobrecarga.
Aqui está o que eu faço e recebo.
import heapq
heap = []
for i in range(10):
heap.append(i)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
heapq.heapify(heap)
heapq.heappush(heap, 10)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
heapq.heappop(heap)
0
heap
[1, 3, 2, 7, 4, 5, 6, 10, 8, 9] <<< Why the list does not remain sorted?
heapq.heappushpop(heap, 11)
1
heap
[2, 3, 5, 7, 4, 11, 6, 10, 8, 9] <<< Why is 11 put between 4 and 6?
Então, como você vê, a lista "heap" não é ordenada, na verdade, quanto mais você adiciona e remove os itens, mais confuso fica. Valores enviados levam a posições inexplicáveis. O que está acontecendo?