Python é conhecida por facilitar a escrita de códigos bonitos e pequenos. A colinha de hoje é sobre como pegar o último elemento de uma lista usando essa linguagem \o/

Vindo de outras linguagens como Java ou C para o Python é normal trazer um pouco de sotaque para os seus códigos e querer fazer algo mais ou menos assim para pegar o último elemento de uma lista:

lista = [1, 2, 3, 4, 5]
indice = len(lista) - 1
print(indice)
# 4
ultimo = lista[indice]
print(ultimo)
# 5

Usar a função de tamanho len() para pegar o comprimeto da lista e subtrair 1 para obter o índice do último elemento daquela lista. E tudo bem! Isso funciona. Porém Python apresenta um jeito mais elegante de fazer isso, veja:

ultimo = lista[-1]
print(ultimo)
# 5

magic gif

Apesar de parecer isso não é mágica não! Da documentação do Python:

If i or j is negative, the index is relative to the end of sequence s: len(s) + i or len(s) + j is substituted. But note that -0 is still 0.

De uma forma mais simples o Raymond Hettinger explica nesse tweet com código:

A implementação de fato é mais complexa que essa, mas o que acontece em linhas gerais: o método __getitem__ é invocado quando fazemos a chamada lista[-1] recebendo a própria lista (self) e o índice negativo (i) então soma esse índice com o tamanho da lista e retornando o valor do indice atualizado. Curiosamente é o mesmo que fiz no primeiro exemplo porém já vem implementado de fábrica.

E detalhe, o mesmo pode ser feito para strings!

palavra = 'opaopa'
print(palavra[-1])
# a

Massa né? Agora é só usar índice negativo nos seus códigos também 😉


Agradecimentos

Mário Sérgio, Diego Ponciano e Paulo Haddad por alguns dos links nesse post!