Remova Duplicatas de Listas Python: 5 Métodos Práticos!

Neste guia prático, você vai descobrir como eliminar entradas duplicadas de listas em Python.

Ao trabalhar com listas em Python, surge frequentemente a necessidade de lidar apenas com itens singulares, ou seja, remover as repetições.

Existem várias abordagens para realizar essa tarefa. Neste tutorial, vamos explorar cinco dessas técnicas.

Fundamentos das listas em Python

Vamos começar nossa exploração revisando os conceitos básicos das listas em Python.

As listas em Python são mutáveis, o que significa que você pode alterá-las adicionando e removendo elementos. Além disso, as listas em Python são coleções que podem conter elementos repetidos.

Então, como podemos manter apenas os elementos únicos e eliminar as duplicatas ou repetições?

Felizmente, há diversas formas de fazer isso. Você pode criar uma nova lista contendo apenas os elementos únicos da lista original, ou pode optar por modificar a lista original, removendo as entradas repetidas.

Vamos detalhar essas técnicas neste tutorial.

Métodos para eliminar duplicatas de listas em Python

Vamos usar um exemplo do cotidiano. Imagine que você está na festa de aniversário de um amigo. 🎊🎉

Na mesa de doces, você observa que alguns itens se repetem. Você decide então remover esses itens duplicados da lista de doces.

Vamos criar uma lista de doces com base nos itens da imagem acima.

doces = ["cupcake","bala","pirulito","bolo","pirulito","cheesecake","bala","cupcake"]

Na lista de doces acima, as entradas ‘bala’ e ‘cupcake’ aparecem duas vezes cada. Usaremos essa lista de exemplo para eliminar os itens repetidos.

Iterar sobre listas em Python para eliminar duplicatas

A abordagem mais direta é construir uma nova lista que contenha cada item apenas uma vez.

Observe o trecho de código abaixo:

doces_unicos = []
for doce in doces:
  if doce not in doces_unicos:
    doces_unicos.append(doce)

print(doces_unicos)

# Output
['cupcake', 'bala', 'pirulito', 'bolo', 'cheesecake']
  • Inicializamos uma lista vazia chamada `doces_unicos`.
  • Enquanto percorremos a lista de doces, examinamos cada doce.
  • Se um doce ainda não estiver na lista `doces_unicos`, nós o adicionamos ao final da lista usando o método `.append()`.

Suponha que encontremos um item repetido, como a segunda ocorrência de ‘bala’ na lista de doces. Este não será adicionado à lista `doces_unicos` porque já está presente: a condição `doce not in doces_unicos` resulta em `False` para a segunda ocorrência de ‘cupcake’ e ‘bala’.

Portanto, usando esta abordagem, cada item aparece exatamente uma vez na lista `doces_unicos`—sem repetições.

Usando list comprehension para remover duplicatas

Você também pode usar list comprehension para popular a lista `doces_unicos`.

Precisa relembrar os fundamentos de list comprehension?

▶️ Consulte o tutorial sobre list comprehension em Python.

Vamos usar a expressão de list comprehension: `[saída for item in iterável if condição]` para reescrever o loop anterior de maneira concisa.

doces_unicos = []
[doces_unicos.append(doce) for doce in doces if doce not in doces_unicos]
print(doces_unicos)

# Output
['cupcake', 'bala', 'pirulito', 'bolo', 'cheesecake']

Embora estejamos criando uma nova lista, não estamos preenchendo a lista criada com valores. Isso acontece porque a saída é a operação `.append()` para a lista `doces_unicos`.

Para eliminar itens duplicados de listas em Python, você também pode utilizar métodos de lista integrados, e exploraremos isso na próxima seção.

Usando métodos de lista integrados para remover duplicatas

Você pode usar os métodos de lista em Python `.count()` e `.remove()` para remover itens repetidos.

– Com a sintaxe `lista.count(valor)`, o método `.count()` retorna quantas vezes o `valor` aparece na lista. Portanto, a contagem de itens repetidos será maior que 1.

– `lista.remove(valor)` remove a primeira ocorrência de `valor` da lista.

Com base no acima, temos o seguinte código.

for doce in doces:
  # verifica se a contagem de doce é > 1 (item repetido)
  if doces.count(doce) > 1:
  # se for True, remove a primeira ocorrência de doce
    doces.remove(doce)

print(doces)

# Output
['bolo', 'pirulito', 'cheesecake', 'bala', 'cupcake']

Como o método `.remove()` remove apenas a primeira ocorrência de um valor, não é possível usá-lo para remover itens que aparecem mais de duas vezes.

  • Se um item específico for duplicado (aparece exatamente duas vezes), este método remove a primeira ocorrência.
  • Se um item específico for repetido K vezes, após a execução do código acima, K-1 repetições ainda permanecerão.

Mas, em geral, quando falamos de duplicatas, geralmente nos referimos a todas as repetições.

Para resolver este problema, você pode modificar o loop anterior para remover todas as repetições, exceto uma. Em vez de usar uma condicional `if` para verificar a contagem de um item específico, você pode usar um loop `while` para remover duplicatas repetidamente até que a contagem de cada item na lista seja 1.

A lista de doces agora contém 2 repetições de ‘cupcake’ e 3 repetições de ‘bala’.

doces = ["cupcake","bala","pirulito","bolo","pirulito","bala","cheesecake","bala","cupcake"]

Você pode usar um loop `while` para remover repetições, conforme mostrado abaixo. O loop `while` continua executando enquanto a contagem de `doce` em `doces` for maior que 1. Quando resta apenas uma ocorrência, a condição `doces.count(doce) > 1` se torna `False`, e o loop avança para o próximo item.

for doce in doces:
  # verifica se a contagem de doce é > 1 (item repetido)
  while(doces.count(doce) > 1):
  # remove repetidamente a primeira ocorrência de doce até que reste apenas uma ocorrência.
    doces.remove(doce)

print(doces)
# Output
['bolo', 'pirulito', 'cheesecake', 'bala', 'cupcake']

Mas usar loops aninhados pode não ser muito eficiente, então você pode considerar usar uma das outras técnicas discutidas se estiver trabalhando com listas extensas.

Até agora, aprendemos o seguinte:

  • Métodos para remover itens duplicados de listas em Python – criando novas listas – contendo apenas itens únicos
  • Métodos de lista integrados `.count()` e `.remove()` para modificar a lista diretamente.

Existem algumas estruturas de dados internas em Python que requerem que os valores sejam todos únicos, sem repetições. Portanto, podemos converter uma lista em Python em uma dessas estruturas de dados para remover duplicatas. E, então, convertê-las de volta para uma lista. Aprenderemos como fazer isso nas próximas seções.

Transformar uma lista Python em um conjunto para remover duplicatas

Conjuntos em Python são coleções de elementos que são todos únicos. Portanto, o número de itens presentes no conjunto (obtido por `len()`) é igual ao número de elementos únicos presentes.

Você pode converter qualquer iterável em Python em um conjunto usando a sintaxe: `set(iterável)`.

Agora, vamos converter a lista de doces em um conjunto e analisar a saída.

set(doces)
# Output
{'bolo', 'bala', 'cheesecake', 'cupcake', 'pirulito'}

Pela saída do código acima, vemos que cada item aparece apenas uma vez e as duplicatas foram eliminadas.

Além disso, observe que a ordem dos itens não é necessariamente a mesma da lista original de doces. Isso ocorre porque, além de ser uma coleção de elementos únicos, um objeto conjunto em Python é uma coleção não ordenada.

Agora que removemos as duplicatas ao converter a lista em um conjunto, podemos convertê-la de volta para uma lista, conforme mostrado abaixo.

doces_unicos = list(set(doces))
print(doces_unicos)

# Output
['bolo', 'cheesecake', 'bala', 'cupcake', 'pirulito']

Usando itens da lista como chaves de dicionário para remover duplicatas

Um dicionário em Python é uma coleção de pares chave-valor, onde as chaves identificam exclusivamente os valores.

Você pode criar um dicionário em Python usando o método `.fromkeys()` com a sintaxe: `dict.fromkeys(chaves, valores)`. Aqui, `chaves` e `valores` são iteráveis que contêm as chaves e os valores do dicionário, respectivamente.

  • `chaves` é um parâmetro obrigatório e pode ser qualquer iterável em Python que corresponda às chaves do dicionário.
  • `valores` é um parâmetro opcional. Se você não especificar o iterável de valores, o valor padrão `None` será usado.

Sem especificar os valores, `dict.fromkeys(doces)` retorna um dicionário em Python onde os valores são definidos como `None` – o valor padrão. A célula de código abaixo ilustra isso.

dict.fromkeys(doces)

# Output
{'bolo': None,
 'bala': None,
 'cheesecake': None,
 'cupcake': None,
 'pirulito': None}

Assim como na seção anterior, podemos converter o dicionário de volta para uma lista, conforme mostrado abaixo.

doces_unicos = list(dict.fromkeys(doces))
print(doces_unicos)
# Output
['cupcake', 'bala', 'pirulito', 'bolo', 'cheesecake']

Pela saída acima, podemos ver que os itens duplicados foram removidos da lista de doces.

Resumindo 👩‍🏫

Aqui está um resumo dos diferentes métodos que você pode utilizar para eliminar itens duplicados ou repetições de listas em Python.

  • Use o método de lista em Python `.append()` para adicionar itens não repetidos a uma nova lista. A nova lista contém cada item da lista original exatamente uma vez e remove todas as repetições. Você também pode conseguir isso usando list comprehension.
  • Use os métodos integrados `.count()` e `.remove()` para remover itens que aparecem exatamente duas vezes. O mesmo pode ser colocado em um loop `while` para remover todas as ocorrências adicionais.
  • Converta uma lista em Python para um conjunto para manter apenas os elementos únicos.
  • Use `dict.fromkeys(lista)` para remover qualquer duplicata da lista, pois um dicionário não deve ter chaves repetidas.

Em seguida, veja alguns projetos em Python para praticar e aprender. Ou aprenda como localizar o índice de um item em listas em Python. Bons estudos!