Como Verificar se uma Lista Possui Duplicatas em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos como verificar se uma lista possui duplicatas em Python. Compreender como identificar duplicatas é crucial para a limpeza, análise e otimização de dados.

Abordaremos dois métodos principais: comparar o comprimento da lista original com o comprimento de sua representação em conjunto (set) e utilizar o objeto collections.Counter. O laboratório começa definindo o que são duplicatas e por que identificá-las é importante, em seguida, fornece exemplos práticos de código Python para demonstrar cada método, incluindo a criação de um arquivo duplicates.py e a implementação de uma função para encontrar duplicatas dentro de uma lista.

Definir Duplicatas

Nesta etapa, exploraremos o que são duplicatas no contexto da programação e como identificá-las em Python. Compreender as duplicatas é crucial para a limpeza, análise e otimização de dados.

O que são Duplicatas?

Duplicatas são simplesmente valores repetidos dentro de um conjunto de dados ou uma coleção de itens. Por exemplo, na lista [1, 2, 2, 3, 4, 4, 4], os números 2 e 4 são duplicatas porque aparecem mais de uma vez.

Por que Identificar Duplicatas?

Identificar e lidar com duplicatas é importante por várias razões:

  • Precisão dos Dados: Duplicatas podem distorcer os resultados da análise e levar a conclusões incorretas.
  • Eficiência de Armazenamento: Armazenar duplicatas desperdiça espaço e recursos.
  • Performance: Processar duplicatas pode retardar algoritmos e aplicações.

Identificando Duplicatas em Python

Vamos começar criando um script Python para identificar duplicatas em uma lista.

  1. Abra seu editor VS Code.

  2. Crie um novo arquivo chamado duplicates.py em seu diretório ~/project.

    ~/project/duplicates.py
  3. Adicione o seguinte código ao arquivo duplicates.py:

    def find_duplicates(data):
        seen = set()
        duplicates = []
        for item in data:
            if item in seen:
                duplicates.append(item)
            else:
                seen.add(item)
        return duplicates
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    duplicate_numbers = find_duplicates(numbers)
    print("Original list:", numbers)
    print("Duplicate numbers:", duplicate_numbers)

    Explicação:

    • A função find_duplicates recebe uma lista data como entrada.
    • Ela usa um set chamado seen para acompanhar os itens que encontrou até agora. Sets são úteis porque armazenam apenas valores únicos.
    • Ela itera pela lista data. Se um item já estiver no set seen, significa que é uma duplicata, então ele é adicionado à lista duplicates. Caso contrário, o item é adicionado ao set seen.
    • Finalmente, a função retorna a lista duplicates.
  4. Execute o script usando o seguinte comando em seu terminal:

    python duplicates.py

    Você deve ver a seguinte saída:

    Original list: [1, 2, 2, 3, 4, 4, 4, 5]
    Duplicate numbers: [2, 4, 4]

    Esta saída mostra a lista original e os números duplicados encontrados na lista.

Comparar len() com len(set())

Nesta etapa, exploraremos uma maneira mais eficiente de detectar duplicatas em uma lista usando a função len() e a estrutura de dados set(). Este método aproveita o fato de que conjuntos (sets) armazenam apenas elementos únicos.

Entendendo len() e set()

  • len(): Esta função retorna o número de itens em uma lista ou qualquer outro objeto iterável.
  • set(): Esta função converte uma lista (ou qualquer iterável) em um conjunto (set). Um conjunto é uma coleção de elementos únicos, o que significa que ele remove automaticamente quaisquer duplicatas.

Como Funciona

A ideia principal é comparar o comprimento da lista original com o comprimento do conjunto criado a partir dessa lista. Se os comprimentos forem diferentes, significa que havia duplicatas na lista original.

Exemplo

Vamos modificar o arquivo duplicates.py que criamos na etapa anterior para usar essa abordagem.

  1. Abra o arquivo duplicates.py em seu diretório ~/project usando o VS Code.

  2. Modifique o código para o seguinte:

    def has_duplicates(data):
        return len(data) != len(set(data))
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    if has_duplicates(numbers):
        print("The list contains duplicates.")
    else:
        print("The list does not contain duplicates.")

    Explicação:

    • A função has_duplicates agora simplesmente compara o comprimento da lista original data com o comprimento do conjunto criado a partir de data.
    • Se os comprimentos forem diferentes, a função retorna True (significando que há duplicatas), caso contrário, retorna False.
  3. Execute o script usando o seguinte comando em seu terminal:

    python duplicates.py

    Você deve ver a seguinte saída:

    The list contains duplicates.

    Se você alterar a lista numbers para [1, 2, 3, 4, 5], a saída será:

    The list does not contain duplicates.

Este método é mais conciso e, muitas vezes, mais eficiente do que o método anterior, especialmente para listas grandes.

Usar collections.Counter

Nesta etapa, exploraremos uma maneira ainda mais poderosa e "Pythonic" de contar duplicatas usando a classe collections.Counter. Esta classe é projetada especificamente para contar a frequência de itens em uma lista ou outro iterável.

Entendendo collections.Counter

A classe collections.Counter é uma subclasse de dict que é especialmente projetada para contar objetos hashable. Ela armazena elementos como chaves de dicionário e suas contagens como valores de dicionário.

Como Funciona

collections.Counter conta automaticamente as ocorrências de cada item em uma lista. Você pode então acessar facilmente as contagens para identificar duplicatas.

Exemplo

Vamos modificar o arquivo duplicates.py em seu diretório ~/project para usar collections.Counter.

  1. Abra o arquivo duplicates.py em seu diretório ~/project usando o VS Code.

  2. Modifique o código para o seguinte:

    from collections import Counter
    
    def find_duplicates_counter(data):
        counts = Counter(data)
        duplicates = [item for item, count in counts.items() if count > 1]
        return duplicates
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    duplicate_numbers = find_duplicates_counter(numbers)
    print("Original list:", numbers)
    print("Duplicate numbers:", duplicate_numbers)

    Explicação:

    • Importamos a classe Counter do módulo collections.
    • A função find_duplicates_counter cria um objeto Counter a partir da lista de entrada data. Isso conta automaticamente as ocorrências de cada item.
    • Em seguida, usamos uma compreensão de lista para criar uma lista de itens que têm uma contagem maior que 1 (ou seja, duplicatas).
  3. Execute o script usando o seguinte comando em seu terminal:

    python duplicates.py

    Você deve ver a seguinte saída:

    Original list: [1, 2, 2, 3, 4, 4, 4, 5]
    Duplicate numbers: [2, 4]

    Esta saída mostra a lista original e os números duplicados encontrados na lista. Observe que a abordagem Counter retorna apenas os valores duplicados únicos, não todas as ocorrências das duplicatas.

Resumo

Neste laboratório, começamos definindo duplicatas como valores repetidos dentro de um conjunto de dados e destacando seu impacto na precisão dos dados, eficiência de armazenamento e desempenho. Em seguida, criamos um script Python para identificar duplicatas em uma lista usando uma função find_duplicates.

A função itera pela lista de entrada, usando um set chamado seen para rastrear os itens encontrados. Se um item já estiver em seen, ele é identificado como uma duplicata e adicionado à lista duplicates. Essa abordagem aproveita a propriedade de valor único dos conjuntos (sets) para detectar duplicatas de forma eficiente.