1. Início
  2. Desenvolvimiento de software
  3. Append Python: Quando utilizar listas e quando evitar

Append Python: Quando utilizar listas e quando evitar

append-python

Você quer saber sobre Append em Python? Falaremos tudo o que é relevante na hora de utilizar listas neste artigo.

O que faz o append em Python?

O append insere um registro após o último elemento, ou seja, ele é útil quando é preciso colocar o novo registro na última posição da tabela.

Como usar o append em Python?

De forma bem simples, confira o exemplo:

>>> ex = [2,4,6,8,10]
>>> ex.append(666)
>>> print(ex)
 
[2, 4, 6, 8, 10, 666]

Não tem segredos, após os elementos declaros surge o append.

10 Livros de Python para ser um especialista

O que é uma lista em Python?

Segundo a documentação oficial, listas são sequências mutáveis, tipicamente usadas para armazenar coleções de itens que são declarados entre [ ] e separados por vírgula.

De maneira direta, para aqueles habituados com estruturas de dados representados em outras linguagens, a lista pode ser classificada como o “array” de elementos no Python.

Mas como muitos outros conceitos do Python, uma série de possíveis utilidades podem passar despercebidas num primeiro contato com as listas e o poder de suas funcionalidades.

Ao longo do amadurecimento de aprendizado e da descoberta de vários contextos em que listas podem ser empregadas, o que ocorre é a reação inversa, a utilização de listas de maneira exagerada, quando outras estruturas seriam melhor empregadas.

Além de entender melhor sobre o que é uma lista, confira também, quais são os contextos em que listas podem ser melhor aplicadas na estruturação de um código feito em Python e quando optar por outras estruturas para melhor desenhar uma solução.

>> Os 5 melhores IDEs para Python em 2020

Objetos iteráveis no Python

Um Objeto Iterável é um tipo de objeto que pode ser abordado por meio de um loop de iterações.

Pareceu confuso? Calma lá! Em outras palavras, é qualquer objeto onde podemos extrair seus elementos através de uma estrutura no estilo for-loop.

Uma lista é um dos built-in types, ou tipos nativos, do Python que é considerado um objeto iterável.

Mas existem outros exemplos de tipos de objetos iteraveis na linguagem:

  1. Tuplas;
  2. Dicionários;
  3. Sets (ou conjuntos);
  4. Ranges;
  5. Strings.

Cada um dos tipos de objetos acima possui uma gama de contextos, onde possuem melhor utilidade do que as listas.

Nem sempre, quando queremos representar uma coleção de itens, a utilização de listas é a melhor alternativa.

Para preservar a imutabilidade de determinada coleção por exemplo, é muito mais aplicado utilizar um tupla, que já possui esse conceito, do que implementar artifícios para utilizar uma lista em que seus itens não possam ser alterados.

Append Python: Quando utilizar listas?

Como citado logo de cara neste artigo sobre append em Python, listas são classificadas como sequências mutáveis. Isso nos dá mostra do propósito de sua utilização.

Estruturas de dados que possuem a característica de mutabilidade e iteração compõem o contexto perfeito para listas.

Listas como pilhas

Listas possuem métodos que a tornam perfeitas para criação de estruturas LIFO (last-in, first-out), conhecidas como pilha, onde o último elemento a entrar é o primeiro elemento a sair.

>>> pilha = [3, 4, 7]
>>> pilha.append(5)
>>> pilha.append(9)
>>> pilha
[3, 4, 7, 5, 9]
>>> pilha.pop()
9
>>> pilha.pop
5
>>> pilha
[3, 4, 7]

É natural pensar que assim como podemos criar pilhas, também podemos criar filas, estruturas FIFO (first-in, first-out), com a utilização de listas.

Esse é um equívoco comum, que será explicado mais tarde neste artigo.

Listas como coleções simples

Listas podem ser tratadas como coleções de elementos.

Ao contrário de outras linguagens, estes elementos não precisam necessariamente ser do mesmo tipo.

>>> frutas = ["melancia", "laranja", "uva"]
>>> numeros = [1, 2, 3]
>>> lista_heterogenea = ["melancia", 1, [frutas, numeros], frutas]

Os três exemplos acima são listas válidas, as duas primeiras homogêneas (com itens do mesmo tipo) e a última heterogênea (com itens de tipos diferentes).

Mas apesar de as listas heterogêneas possuírem algumas aplicabilidades específicas, normalmente não são utilizadas.

O uso de listas homogêneas se configura uma boa prática, visto o ganho de eficiência, legibilidade e performance na implementação de rotinas que percorrem todos os seus elementos executando algum tipo de operação.

Criação dinâmica de listas

Na falta de um termo melhor para traduzir “list comprehension” utilizei o termo “criação dinâmica de listas”.

Este é um artifício para criar de forma concisa uma lista a partir de operações efetuadas em qualquer objeto iterável.

Imagine que você queira uma lista com o valor do dobro de cada elemento do intervalo de números de 0 a 19.

Podemos chegar a este resultado de várias maneiras, de forma mais simples:

>>> valores_dobrados = []
>>> for valor in range(20):
…    valores_dobrados.append(valor)
>>> valores_dobrados
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]

Com list comprehension esta operação é simplificada ao seguinte:

>>> valores_dobrados = [valor*2 for valor in range(20)]
>>> valores_dobrados
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]

Mais enxuto e mais legível, não?

A elegância e eficiência no uso de listas reside na formulação de estruturas simples que trazem poder e performance para o código.

Muitos desenvolvedores em determinado ponto de maturidade chegam a conclusão que o simples é difícil.

Append Python: Quando NÃO utilizar listas?

Agora chegamos ao ponto mais valioso deste artigo.

Seguem alguns casos comuns, em que muitos decidem de maneira equivocada utilizar listas, quando existem objetos mais adequados ao contexto.

Estabelecimento de intervalos numéricos imutáveis

A estrutura do laço de repetição “for” no Python é diferente da estrutura mais comum desse tipo de laço em outras linguagens.

Enquanto outras linguagens mantém uma variável que é utilizada na condição de parada do laço, em Python essa interação é feita através de um objeto iterável. Então em vez de:

for (var i = 0, i<=4, i++) {
  ...
}

Em Python, temos que escrever algo do tipo:

for i in range(4):
  ...

A necessidade de um objeto iterável para compor o laço normalmente gera o erro inicial de se utilizar listas para esta necessidade:

lista = [0, 1, 2, 3]
for i in lista:
  ....

Quando a iteração precisa ter um limite estático, o uso de um objeto do tipo range é mais apropriado, visto que a sequência gerada pelo range é imutável.

É claro que existem inúmeros contextos em que é pertinente se utilizar uma lista como iterável de um laço for, quando a mutabilidade da lista é compatível com a rotina implementada.

Criação de filas

Como já mencionado neste artigo, listas são perfeitas para a estruturação de pilhas em Python.

Mas é comum o equívoco de também se utilizar listas para a estruturação de filas.

É possível sim, criar estruturas de filas com listas, mas esta não é uma abordagem eficiente.

Enquanto colocar e retirar elementos do fim de uma lista é uma operação rápida, colocar e retirar elementos do início dela é uma operação lenta, porque isso envolve deslocar estes elementos um a um até se chegar ao primeiro.

Você pode se indagar que remover o primeiro item através do index é plausível, mas não, esta também é uma operação mais onerosa do que utilizar um tipo de objeto mais propício a este contexto.

Neste caso, a utilização de um objeto do tipo deque é mais pertinente.

Deque é uma aglutinação para “double-ended queue”, ou filas de duas pontas.

Operações de retirada e inserção de elementos no início de um objeto do tipo deque é muito mais eficiente e gasta muito mesmo memória do que estas mesmas operações em uma fila.

No caso de um objeto do tipo deque, ele também pode ser utilizado como pilha com a mesma eficiência.

Executar operações em conjuntos

Muitas vezes precisamos efetuar a junção de duas coleções de elementos ou verificar elementos em comum entre duas coleções, em outras palavras, efetuar as operações de união ou intersecção entre dois conjuntos.

Python possui uma gama de funcionalidades vindas de conceitos matemáticos que podem nos ajudar em contextos cotidianos, mas que são subutilizadas por falta de hábito ou conhecimento.

Objetos do tipo set são definidos em Python exatamente como a representação matemática de conjuntos com suas operações.

Uma das principais diferenças entre listas e sets é que este último não permite a existências de elementos duplicados.

Normalmente, ao se deparar com esse contexto, muitos decidem efetuar uma operação de concatenação entre duas listas (para união) ou uma série de diferenças entre listas e sublistas (para intersecção).

Assim como no caso do uso de objetos do tipo deque para implementação de filas, o uso de objetos do tipo set para operações em conjuntos se mostra mais eficiente e performático do que a utilização de listas para o mesmo fim.

A documentação é sua melhor aliada

Os exemplos dados neste artigo são uma amostra de conceitos que podem ajudar na resolução de problemas corriqueiros, nesse caso que envolvem a utilização de listas, mas que podem passar despercebidos em análises superficiais.

Python é uma linguagem de programação famosa por seus conceitos sólidos e que possui muito mais artifícios do que o que foi apresentado aqui.

Conhecer a fundo o built-in types é imprescindível para a melhor aplicação desses conceitos no cotidiano do uso de Python.

Alguns dos conceitos apresentados também foram retirados da documentação de collections da linguagem.

Enfim, a documentação oficial de Python é abrangente e amigável.

O interesse pelos conceitos podem ser disseminados por posts em blogs e pela interação da comunidade, mas no fim das contas, costumo dizer que a documentação é a melhor aliada para a solidificação de conhecimentos.

Quer mais? Saiba também como automatizar Testes com Python.

Você sabia que a GeekHunter possui uma página com vagas para desenvolvedores python. Para demonstrar interesse nas vagas é muito simples: crie um perfil grátis e seja visto(a) pelas empresas.

Quer conhecer a plataforma líder em recrutamento tech?

A solução mais completa para recrutar os melhores talentos tech.

Precisa de ajuda para recrutar talentos?

Conheça o Serviço de Recrutamento da Geekhunter

Leituras Recomendadas

Quer receber conteúdos incríveis como esses?

Assine nossa newsletter para ficar por dentro de todas as novidades do universo de TI e carreiras tech.