Espreitando em uma pilha em python
Pergunta
Qual é a maneira oficial de espreitar em uma pilha de Python, criada pelo HEAPQ Libs? Agora eu tenho
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
O que é sem dúvida, não muito bom. Posso sempre assumir isso heap[0]
O topo da pilha é e use isso? Ou isso assumiria muito da implementação subjacente?
Solução
Sim, você pode fazer essa suposição, porque é declarada no documentação:
Pilhas são matrizes para as quais
heap[k] <= heap[2*k+1]
eheap[k] <= heap[2*k+2]
para todos k, contando elementos de zero. Por uma questão de comparação, elementos inexistentes são considerados infinitos. A propriedade interessante de uma pilha é queheap[0]
é sempre o seu menor elemento.
(E essa é provavelmente a razão pela qual não há peek
Função: não há necessidade disso.)
Outras dicas
Se você estiver usando o Python 2.4 ou mais recente, também poderá usar heapq.nsmalest ().