Encontrar duplicados numa lista em Python

Rayven Esplanada 30 janeiro 2023
  1. Utilize o set() Função para remover duplicados de uma lista em Python
  2. Utilize o módulo iteration_utils para encontrar duplicados numa lista Python
Encontrar duplicados numa lista em Python

Este tutorial mostra-lhe como procurar por duplicados dentro de uma lista em Python.

Utilize o set() Função para remover duplicados de uma lista em Python

Python set() é uma função para converter uma lista em um array. Com base na descrição de um array e de uma lista, a conversão de uma lista num array significaria a remoção de todas as duplicações da lista.

No entanto, o que queremos é procurar as entradas dentro da lista que são duplicados. Para tal, continuamos a utilizar a função set(), mas só incluímos na lista as entradas com mais do que uma, o que significa que são entradas que têm duplicatas.

Declarar uma função que procura duplicatas dentro de uma lista e armazená-las como um array.

def listToSet(listNums):
    set([num for num in listNums if listNums.count(x) > 1])

Outra abordagem, se se quiser manter o resultado como uma lista em vez de um array, é utilizar set() e add() para encontrar duplicados dentro da lista e reconvertê-los para uma lista durante a devolução.

def list_duplicates(listNums):
    once = set()
    seenOnce = once.add
    twice = set(num for num in listNums if num in once or seenOnce(x))
    return list(twice)

Esta função adiciona a entrada a once se o número aparecer pela primeira vez, e não existe dentro do array once.

Ambas as funções devolverão a mesma saída, embora uma seja um array, e outra seja uma lista. O resultado irá emitir todas as entradas duplicadas em listNums.

[1, 3, 5, 8]

Utilize o módulo iteration_utils para encontrar duplicados numa lista Python

O iteration_utils tem duas funções que podem procurar duplicados dentro de uma função pré-definida: duplicates e unique_everseen.

Vamos utilizar a mesma definição de lista listNums acima.

Importar duplicates de iteration_utils e utilizá-lo para devolver uma lista de todas as duplicatas dentro de listNums.

from iteration_utils import duplicates

listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]


def listDups(listNums):
    return list(duplicates(listNums))

A saída da função acima irá retornar uma lista de todas as entradas duplicadas dentro de listNums.

[1, 1, 3, 3, 5, 5, 5, 5, 8, 8]

Embora, a lista também inclua as iterações das entradas duplicadas. Isto significa que devolverá cada instância da entrada duplicada.

  • É aqui que entra o unique_everseen. Esta função processa a lista para remover todas as instâncias duplicadas que duplicates() devolvem.
from iteration_utils import duplicates
from iteration_utils import unique_everseen

listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]


def listDupsUnique(listNums):
    return list(unique_everseen(duplicates(listNums)))

Esta função irá então retornar:

[1, 3, 5, 8]

Em resumo, existem 2 soluções fáceis para procurar duplicados dentro de uma lista em Python. A primeira é utilizar set() e outras funções utilitárias de conjuntos em Python para procurar duplicados e armazená-los noutra variável. Outra é através do módulo iteration_utils utilizando duplicates e unique_everseen, que mais ou menos faz a mesma coisa e produz a mesma saída.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python List