5 métodos para remover itens duplicados de listas Python

Neste tutorial, você aprenderá como remover itens duplicados das listas do Python.

Quando você está trabalhando com listas em Python, às vezes você pode precisar trabalhar apenas com itens exclusivos na lista – removendo as duplicatas.

Existem algumas maneiras diferentes de fazer isso. Neste tutorial, abordaremos cinco dessas técnicas.

Noções básicas de listas Python

Vamos começar nossa discussão revisando o básico das listas do Python.

As listas do Python são mutável. Assim, você pode modificá-los adicionando e removendo elementos da lista. Além disso, as listas do Python são coleções de elementos não necessariamente exclusivos.

Então, como você retém apenas os elementos exclusivos e remove os elementos duplicados ou repetidos?

Bem, você pode fazer isso de algumas maneiras diferentes. Você pode criar uma nova lista que contenha apenas os elementos exclusivos da lista original. Ou você pode optar por modificar a lista original e remover os itens duplicados.

Vamos aprender isso em detalhes neste tutorial.

Métodos para remover duplicatas de listas do Python

Vamos dar um exemplo do mundo real. Suponha que você esteja na festa de aniversário do seu amigo.🎊🎉

Na coleção de doces apresentada, você vê que há alguns itens que se repetem. Agora você gostaria de remover esses itens duplicados da lista de doces.

Vamos criar uma lista de doces contendo todos os itens da imagem acima.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

Na lista de doces acima, os itens ‘doce’ e ‘cupcake’ são repetidos duas vezes. Vamos usar esta lista de exemplo para remover os itens duplicados.

Iterar sobre listas do Python para remover duplicatas

O método mais simples é criar uma nova lista que contenha cada item exatamente uma vez.

Leia a célula de código abaixo:

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • Inicializamos uma lista vazia unique_sweets.
  • Enquanto percorremos a lista de doces, acessamos cada doce.
  • Se sweet ainda não estiver presente na lista unique_sweets, nós o adicionamos ao final da lista unique_sweets usando o método .append().
  Como verificar se alguém encaminhou seu e-mail

Suponha que você encontre um item repetido, por exemplo, a segunda ocorrência de ‘doce’ na lista de doces. Isso não é adicionado à lista unique_sweets porque já está presente: sweet not in unique_sweets é avaliado como False para a segunda ocorrência de ‘cupcake’ e ‘candy’.

Portanto, neste método, cada item ocorre exatamente uma vez na lista unique_sweets—sem qualquer repetição.

Use a compreensão de lista para remover duplicatas

Você também pode usar a compreensão da lista para preencher a lista unique_sweets.

Quer atualizar o básico da compreensão de listas?

▶️ Confira o tutorial sobre compreensão de listas em Python.

Vamos usar a expressão de compreensão de lista: [output for item in iterable if condition is True] para reescrever o loop acima de forma concisa.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Mesmo que você esteja criando uma nova lista, você não está preenchendo a lista criada com valores. Isso ocorre porque a saída é a operação .append() para a lista unique_sweets.

Para remover itens duplicados das listas do Python, você também pode usar métodos de lista integrados, e abordaremos isso na próxima seção.

Use métodos de lista integrados para remover duplicatas

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

– Com a sintaxe list.count(value), o método .count() retorna o número de vezes que o valor ocorre na lista. Portanto, a contagem correspondente a itens repetidos será maior que 1.

– list.remove(value) remove a primeira ocorrência de value da lista.

Usando o acima, temos o seguinte código.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

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

  • Se um determinado item for duplicado (ocorre exatamente duas vezes), esse método remove a primeira ocorrência.
  • Se um item específico for repetido K vezes, depois de executar o código acima, as repetições K-1 ainda permanecerão.
  Como usar o Google Lens no iPhone

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

Para lidar com esse caso, você pode modificar o loop acima 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 executar um loop while para remover duplicações 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 ‘doce’.

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Você pode usar um loop while para remover repetições, como mostrado abaixo. O loop while continua sendo executado enquanto a contagem de sweet em sweets for maior que 1. Quando apenas uma ocorrência permanece, a condição sweets.count(sweet) > 1 se torna False, e o loop pula para o próximo item.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', '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 grandes.

Até agora, aprendemos o seguinte:

  • Métodos para remover itens duplicados de listas do Python – criando novas listas – contendo apenas itens exclusivos
  • Métodos de lista integrados .count() e .remove() para modificar a lista no local

Existem algumas estruturas de dados internas do Python que exigem que os valores sejam todos exclusivos, sem repetição. Portanto, podemos lançar uma lista Python em uma dessas estruturas de dados para remover duplicatas. E, em seguida, converta-os de volta em uma lista. Aprenderemos como fazer isso nas próximas seções.

Lançar lista Python em um conjunto para remover duplicatas

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

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

  Corrigir um erro de soquete ocorrido durante o teste de upload

Agora, vamos converter os doces da lista em um conjunto e examinar a saída.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

A partir da saída na célula de código acima, vemos que cada item aparece exatamente uma vez e as duplicatas foram removidas.

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

Agora que removemos as duplicatas convertendo a lista em um conjunto, podemos convertê-la novamente em uma lista, conforme mostrado abaixo.

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Use itens de lista como chaves de dicionário para remover duplicatas

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

Você pode criar um dicionário Python usando o método .fromkeys() com a sintaxe: dict.fromkeys(keys, values). Aqui, chaves e valores são iteráveis ​​contendo as chaves e valores do dicionário, respectivamente.

  • keys é um parâmetro obrigatório e pode ser qualquer iterável do Python correspondente às chaves do dicionário.
  • valores é um parâmetro opcional. Se você não especificar os valores iteráveis, o valor padrão de Nenhum será usado.

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

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

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

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

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

Resumindo👩‍🏫

Aqui está uma recapitulação dos diferentes métodos que você pode usar para remover itens duplicados ou repetições das listas do Python.

  • Use o método de lista do 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 fazer isso usando a compreensão da lista.
  • Use os métodos .count() e .remove() integrados para remover itens que ocorrem exatamente duas vezes. O mesmo pode ser colocado em um loop while para remover todas as ocorrências adicionais.
  • Converta uma lista Python em um conjunto para reter apenas os elementos exclusivos.
  • Use dict.fromkeys(list) para remover quaisquer duplicatas da lista, pois não deve haver chaves de repetição do dicionário.

Em seguida, confira os projetos Python para praticar e aprender. Ou aprenda como encontrar o índice de um item nas listas do Python. Feliz aprendizado!