Python: Append ou Extend? Adicionando elementos na lista
4 min4 minutos de leitura
4 min4 minutos de leitura
Autor(a)
Alex Felipe
Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
No desenvolvimento de qualquer sistema, é muito comum lidarmos com listas, como por exemplo, uma lista de produtos. Suponhamos que tenhamos a seguinte representação de um produto:
classProduto(object): def__init__(self, nome, valor):
self.__nome = nome
self.__valor = valor
Por enquanto, tudo ocorrendo conforme o esperado, mas, e se quisermos adicionar um novo produto nessa lista? Como podemos fazer isso? Nas listas do Python, existem duas funções capazes de adicionar elementos, que são a append e a extend. Vamos então testá-las! Começaremos pelo append:
Opa! Parece que o extend não consegue adicionar um objeto na lista... Será mesmo? Se analisarmos a mensagem de erro, ela nos informa que o objeto do tipo "Produto" não é iterable, mas o que será que isso significa?
O extend, diferente do append, itera sobre o elemento que deseja adicionar, ou seja, envolve o argumento passado por parâmetro dentro de um laço, e então, adiciona os valores contidos dentro desse parâmetro, nesse caso, ele tentou fazer isso com o objeto do tipo Produto. É justamente por isso que não foi possível adicionar o objeto do tipo Produto e apresentou esse erro.
Então significa que não podemos utilizar o extend para adicionar objetos?
Não exatamente!
Uma solução para esse problema é, ao invés de enviar um objeto puro, mandar como parâmetro uma estrutura iterável que contenha um objeto do tipo "Produto", ou seja, enviar uma lista que contenha um Produto!
Funcionou como o esperado! Entretanto, adicionamos apenas um único elemento! E se quiséssemos adicionar vários elementos? Em outras palavras, adicionar uma lista de produtos novos. Será que funcionaria sem nenhum problema? Vamos testar primeiro com o append:
[nome:Chocolate valor:4.35, nome:Refrigerante valor:3.75, nome:Feijao valor:10.5, [nome:suco natural valor:4.5, nome:pao de forma valor:3.0]]
Aparentemente funcionou, mas repara que ao invés de adicionar cada produto na lista de produtos, ele adicionou uma lista inteira! Ou seja, quando utilizamos o append ele simplesmente adiciona o valor completo na lista. Mas e se utilizarmos o extend? Será que funciona? Isto é, adiciona produto por produto? Vamos verificar:
[nome:Chocolate valor:4.35, nome:Refrigerante valor:3.75, nome:Feijao valor:10.5, nome:suco natural valor:4.5, nome:pao de forma valor:3.0]
Funcionou conforme o esperado! Portanto concluímos que as duas funções funcionam da seguinte forma:
append: Adiciona qualquer valor completo, por exemplo, se enviarmos um objeto, ele adiciona o objeto, se enviarmos uma lista, ele adiciona a lista inteira ao invés de seus itens.
extend: Adiciona itens de uma estrutura iterável, por exemplo, se enviarmos um objeto puro, ele não sabe como adicionar, porém, se enviarmos esse mesmo objeto dentro de uma lista, ele varrerá a lista e adicionará esse objeto e, caso exista outros, os demais dentro da lista.
Podemos ver claramente a diferença entre as duas funções no momento que tentamos adicionar uma string, por exemplo, a string "chocolate":
Veja que, enquanto o append adicionou toda a string, o extend adicionou letra por letra, pois a string, por de trás dos panos, é um array de char, portanto, ele varre esse array, isto é, essa estrutura iterável, e adiciona cada item.
Sabia dessa diferença no momento de adicionar algum elemento nas listas do Python? Não sabia? Quer aprender mais? Então dê uma olhada na nossa formação de Python para web na Alura e aprenda hoje mesmo os diversos recursos que essa linguagem nos oferece!