Cómo encontrar duplicados en una lista en Python

Rayven Esplanada 30 enero 2023
  1. Utilice la función set() para eliminar los duplicados en una lista en Python
  2. Utilice el módulo iteration_utils para encontrar duplicados en una lista de Python
Cómo encontrar duplicados en una lista en Python

Este tutorial muestra cómo buscar duplicados dentro de una lista en Python.

Utilice la función set() para eliminar los duplicados en una lista en Python

Python set() es una función para convertir una lista en un conjunto. Basándose en la descripción de un conjunto y una lista, convertir una lista en un conjunto significaría eliminar todos los duplicados de la lista.

Sin embargo, lo que queremos es buscar las entradas de la lista que son duplicadas. Para ello, seguimos usando la función set(), pero sólo incluimos las que tienen más de una entrada en la lista, lo que significa que son entradas que tienen duplicados.

Declarar una función que busca duplicados dentro de una lista y almacenarlos como un conjunto.

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

Otra aproximación, si quiere mantener el resultado como una lista en lugar de un conjunto, es usar set() y add() para encontrar duplicados dentro de la lista y reconvertirla a una lista durante el retorno.

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 función añade la entrada a once si el número aparece por primera vez, y no existe dentro del conjunto once.

Ambas funciones devolverán la misma salida, aunque una es un conjunto, y otra es una lista. El resultado dará como resultado todas las entradas duplicadas en listNums.

[1, 3, 5, 8]

Utilice el módulo iteration_utils para encontrar duplicados en una lista de Python

iteration_utils tiene dos funciones que pueden buscar duplicados dentro de una función predefinida: duplicates y unique_everseen.

Vamos a usar la misma definición de lista listNums de arriba.

Importar duplicates de iteration_utils y usarla para devolver una lista de todos los duplicados 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))

La salida de la función anterior devolverá una lista de todas las entradas duplicadas dentro de listNums.

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

Aunque, la lista también incluye las iteraciones de las entradas duplicadas. Esto significa que devolverá cada instancia de la entrada duplicada.

  • Aquí es donde entra unique_everseen. Esta función procesa la lista para eliminar todas las instancias duplicadas que duplicates() devuelve.
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 función entonces regresará:

[1, 3, 5, 8]

En resumen, hay 2 soluciones fáciles para buscar duplicados dentro de una lista en Python. La primera es usar set() y otras funciones de utilidad de los conjuntos en Python para buscar duplicados y almacenarlos en otra variable. Otra es mediante el módulo iteration_utils usando duplicates y unique_everseen, que más o menos hace lo mismo y produce la misma salida.

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

Artículo relacionado - Python List