Minha desempilhe()

Minha desempilhe()

por José Coelho de Pina -
Número de respostas: 8

Salve,

Fiz uma função desempilhe().
O que vocês acham dela?

def desempilhe(pilha):
    '''(list) -> valor

    Recebe uma lista `pilha` e remove e retorna o último 
    elemento da lista.
    '''
    n = len(pilha)
    valor = pilha[-1] # ou pilha[n-1] 
    pilha = pilha[:-1] # ou pilha[0:-1] ou pilha[0:n-1]
    return valor


    
Em resposta à José Coelho de Pina

Re: Minha desempilhe()

por Beatriz Helena Ghiselli -

É o mesmo que .pop() faz, certo?

Em resposta à Beatriz Helena Ghiselli

Re: Minha desempilhe()

por Carlos Hitoshi Morimoto -

então o que a função main() abaixo imprime usando essa função desempilhe()?

 

def main ( ) :
'''() -> None
    '''
    minha_pilha = [10, 20, 30]
    valor = desempilhe( minha_pilha )
print("Valor: ", valor) print("Minha pilha: ", minha_pilha)

outro = minha_pilha.pop()
print("Outro: ", outro)
print("Minha pilha: ", minha_pilha)
Em resposta à Carlos Hitoshi Morimoto

Re: Minha desempilhe()

por Pedro T. R. Pinheiro -

Valor: 30
Minha pilha: [10,20]

Outro: [10]
Minha pilha: [10]


O outro aqui é apenas um outro ponteiro para o mesmo objeto "minha_pilha". Acho eu...

Em resposta à José Coelho de Pina

Re: Minha desempilhe()

por Vitor Hugo Vieira de Lima -

acredito que o erro seja o pilha = pilha[:-1]

pois a função retorna somente 'valor' a pilha modificada morre lá

 

Em resposta à Vitor Hugo Vieira de Lima

Re: Minha desempilhe()

por Luiz Felype Azevedo Pascoal -

Eu concordo. Quando a função é chamada, 'pilha' aponta para um objeto lista. Quando executa pilha=pilha[:-1] o que o Python faz é clonar o objeto lista apontado inicialmente por 'pilha' sem o último item e apontar 'pilha' para este clone. A função não altera o objeto lista original como o método .pop() faz.