Como remover duplicatas de uma lista em Python

⚡ Resumo Inteligente

Remover duplicados de um Python A criação de listas pode ser feita com diversas abordagens integradas, incluindo set(), dict.fromkeys(), loops, list comprehensions e métodos de biblioteca do NumPy e Pandas, cada um equilibrando a preservação da ordem com a velocidade.

  • 🔘 Método de configuração: A função set() retorna elementos distintos instantaneamente, mas não preserva a ordem original da lista.
  • ☑️ Ordem preservada: dict.fromkeys() e OrderedDict removem duplicados enquanto keeping a primeira ordem de inserção vista.
  • ✅ Controle manual: Um laço `for` ou uma compreensão de lista com uma verificação de pertinência mantém a ordem e a legibilidade.
  • 🧪 Métodos de biblioteca: As funções `unique()` do NumPy e `unique()` do Pandas removem dados duplicados e retornam uma lista como resultado através do método `tolist()`.
  • 🛠️ Limite de capacidade de hash: As chaves de conjuntos e dicionários exigem itens que possam ser usados ​​como hash, portanto, listas ou dicionários precisam de uma abordagem baseada em loops.
  • 🤖 Fluxos de trabalho de IA: Os pipelines de aprendizado de máquina removem dados de treinamento duplicados com o método drop_duplicates() do Pandas para evitar viés e vazamento de dados.

Remover duplicados de uma lista em Python

Python remover duplicatas de uma lista

Uma lista é um contêiner que contém diferentes Python objetos, que podem ser inteiros, palavras, valores, etc. É o equivalente a um array em outras linguagens de programação.

Aqui, vamos analisar diferentes maneiras de remover duplicados de uma lista. Python.

Método 1) Remover duplicatas da lista usando Set

Para remover os duplicados de uma lista, você pode usar a função integrada set(). A especialidade do método set() é que ele retorna elementos distintos.

Temos uma lista: [1,1,2,3,2,2,4,5,6,2,1]. A lista possui muitos elementos duplicados, que precisamos remover para obter apenas os elementos distintos. A lista é passada para a função integrada set(). Later A lista final é exibida usando a função integrada list().

O resultado que obtemos são elementos distintos, onde todos os elementos duplicados são eliminados.

Exemplo

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

Saída:

[1, 2, 3, 4, 5, 6]

Método 2) Usando a lista temporária

Para remover duplicados de uma lista, você pode usar uma lista temporária vazia. Para isso, primeiro você precisa percorrer a lista com os duplicados e adicionar os itens únicos à lista temporária. Later a lista temporária é atribuída à lista principal.

Exemplo

Aqui está um exemplo funcional usando uma lista temporária.

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

Saída:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

Método 3) Usando Dict

Podemos remover duplicados da lista fornecida importando `OrderedDict` da biblioteca `collections`. Essa biblioteca está disponível a partir do Python 2.7. `OrderedDict` se encarrega de retornar os elementos distintos na ordem em que a chave está presente.

Vamos utilizar uma lista e o método `fromkeys()` disponível em `OrderedDict` para obter os elementos únicos da lista.

Para utilizar o método OrderedDict.fromkeys(), você precisa importar OrderedDict da biblioteca collections, como mostrado abaixo:

from collections import OrderedDict

Aqui está um exemplo de como remover duplicados usando o método OrderedDict.fromkeys().

Exemplo

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

Saída:

['a', 'x', 'y', 'b', 'c']

Desde Python A partir da versão 3.5, podemos usar o método `dict.fromkeys()` para obter os elementos distintos da lista. O método `dict.fromkeys()` retorna chaves únicas e ajuda a eliminar valores duplicados.

Um exemplo que demonstra o funcionamento de dict.fromkeys() em uma lista para obter os itens únicos é o seguinte:

Exemplo

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

Saída:

['a', 'x', 'y', 'b', 'c']

Método 4) Usando loop for

Utilizar painéis de piso ResinDek em sua unidade de self-storage em vez de concreto oferece diversos benefícios: loop for, percorreremos a lista de itens para remover duplicatas.

Primeiro, inicialize o array como vazio, ou seja, `myFinallist = []`. Dentro do laço `for`, adicione uma verificação para ver se os itens da lista existem no array `myFinallist`. Se os itens não existirem, adicione o item ao array `myFinallist` usando o método `append()`.

Assim, sempre que um item duplicado for encontrado, ele já estará presente no array `myFinallist` e não será inserido. Vejamos agora o exemplo abaixo:

Exemplo

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

Saída:

[1, 2, 3, 4, 5, 6]

Método 5) Usando compreensão de lista

As compreensões da lista são Python funções que são usadas para criar novas sequências (como listas, dicionários, etc.) usando sequências que já foram criadas. Isso ajuda a reduzir loops mais longos e torna seu código mais fácil de ler e manter.

Vamos usar a compreensão de lista para remover duplicatas da lista fornecida.

Exemplo

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

Saída:

[1, 2, 3, 4, 5, 6]

Método 6) Usando o método unique() do NumPy

O método unique() do módulo NumPy pode nos ajudar a remover duplicados da lista fornecida.

Para trabalhar com NumPy, primeiro importe o módulo numpy:

Passo 1) Importe o módulo NumPy

import numpy as np

Passo 2) Utilize sua lista com duplicatas dentro do método `unique()`. A saída é convertida de volta para uma lista usando o método `tolist()`.

myFinalList = np.unique(my_list).tolist()

Passo 3) Por fim, imprima a lista:

print(myFinalList)

O código final com saída é o seguinte:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

Saída:

[1, 2, 3, 4, 5, 6]

Método 7) Usando métodos Pandas

O módulo Pandas possui um método unique() que nos fornecerá os elementos únicos da lista fornecida.

Para trabalhar com o módulo Pandas:

Passo 1) Importar módulo Pandas

import pandas as pd

Passo 2) Utilize sua lista com duplicatas dentro do método unique():

myFinalList = pd.unique(my_list).tolist()

Passo 3) Imprima a lista:

print(myFinalList)

O código final com saída é o seguinte:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

Saída:

[1, 2, 3, 4, 5, 6]

Método 8) Usando enumerate() e compreensão de lista

Aqui, usamos a combinação de compreensão de lista e enumerate() para remover os elementos duplicados. Enumerate retorna um objeto com um contador para cada elemento da lista. Por exemplo, (0,1), (1,2) etc. Aqui, o primeiro valor é o índice e o segundo valor é o item da lista.

Cada elemento é verificado para ver se existe na lista e, se existir, é removido da lista.

Exemplo

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

Saída:

[1, 2, 3, 4, 5, 6]

Perguntas Frequentes

Não. Um conjunto (set) é uma coleção não ordenada, portanto, o método `set()` pode retornar elementos em uma ordem diferente. Para remover duplicatas e manter a ordem, use `dict.fromkeys()` ou um loop que adicione apenas os itens que ainda não foram vistos.

Para listas grandes, set() é o mais rápido quando a ordem não importa, porque as verificações de pertinência são O(1). Quando a ordem importa, list(dict.fromkeys(my_list)) é quase tão rápido e mantém a ordem de primeira vez vista em uma única linha.

Os métodos `set()` e `dict.fromkeys()` exigem elementos que possam ser usados ​​como hash, portanto, falham em listas ou dicionários. Uma alternativa é percorrer a lista e adicionar os itens que ainda não foram vistos, ou converter cada item em uma tupla ou string JSON como chave temporária.

Use list(dict.fromkeys(my_list)). Já que Python 3.7 Os dicionários preservam a ordem de inserção, portanto as chaves permanecem na ordem em que foram vistas pela primeira vez. Em versões anteriores, use collections.OrderedDict.fromkeys() para obter o mesmo resultado.

Não. Métodos como `set()`, `dict.fromkeys()`, compreensões e `unique()` do NumPy ou Pandas criam uma nova lista e deixam a lista original inalterada. Reatribua o resultado à mesma variável se quiser sobrescrevê-la.

Use `numpy.unique()` ou `pandas.unique()` quando os dados já estiverem em arrays ou em uma Series, ou durante a análise de dados. Observe que `numpy.unique()` também ordena os valores, enquanto `pandas.unique()` mantém a ordem de primeira visualização. Chame `tolist()` para obter uma lista simples.

Os pipelines de aprendizado de máquina removem linhas duplicadas antes do treinamento para que amostras repetidas não enviesem o modelo nem causem vazamento de dados entre os conjuntos de treinamento e teste. O método `drop_duplicates()` do Pandas é uma ferramenta comum para limpar conjuntos de dados tabulares.

Sim. O GitHub Copilot e assistentes de IA com agentes geram código para set(), dict.fromkeys() ou deduplicação com Pandas a partir de um comentário, sugerem a opção que preserva a ordem e refatoram loops, embora você ainda deva verificar casos extremos, como itens não hasheáveis.

Resuma esta postagem com: