Cómo comprobar si una lista tiene duplicados en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo verificar si una lista tiene duplicados en Python. Comprender cómo identificar duplicados es crucial para la limpieza, análisis y optimización de datos.

Cubriremos dos métodos principales: comparar la longitud de la lista original con la longitud de su representación como conjunto, y utilizar el objeto collections.Counter. El laboratorio comienza definiendo qué son los duplicados y por qué es importante identificarlos, y luego proporciona ejemplos prácticos de código Python para demostrar cada método, incluyendo la creación de un archivo duplicates.py y la implementación de una función para encontrar duplicados dentro de una lista.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/for_loops -.-> lab-559531{{"Cómo comprobar si una lista tiene duplicados en Python"}} python/dictionaries -.-> lab-559531{{"Cómo comprobar si una lista tiene duplicados en Python"}} python/sets -.-> lab-559531{{"Cómo comprobar si una lista tiene duplicados en Python"}} python/function_definition -.-> lab-559531{{"Cómo comprobar si una lista tiene duplicados en Python"}} python/data_collections -.-> lab-559531{{"Cómo comprobar si una lista tiene duplicados en Python"}} end

Definir Duplicados

En este paso, exploraremos qué son los duplicados en el contexto de la programación y cómo identificarlos en Python. Comprender los duplicados es crucial para la limpieza, análisis y optimización de datos.

¿Qué son los Duplicados?

Los duplicados son simplemente valores repetidos dentro de un conjunto de datos o una colección de elementos. Por ejemplo, en la lista [1, 2, 2, 3, 4, 4, 4], los números 2 y 4 son duplicados porque aparecen más de una vez.

¿Por qué Identificar Duplicados?

Identificar y manejar duplicados es importante por varias razones:

  • Precisión de los Datos: Los duplicados pueden distorsionar los resultados del análisis y llevar a conclusiones incorrectas.
  • Eficiencia de Almacenamiento: Almacenar duplicados desperdicia espacio y recursos.
  • Rendimiento: Procesar duplicados puede ralentizar algoritmos y aplicaciones.

Identificar Duplicados en Python

Comencemos creando un script de Python para identificar duplicados en una lista.

  1. Abra su editor de VS Code.

  2. Cree un nuevo archivo llamado duplicates.py en su directorio ~/project.

    ~/project/duplicates.py
  3. Agregue el siguiente código al archivo 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)

    Explicación:

    • La función find_duplicates toma una lista data como entrada.
    • Utiliza un set llamado seen para llevar un registro de los elementos que ha encontrado hasta el momento. Los conjuntos (sets) son útiles porque solo almacenan valores únicos.
    • Recorre la lista data. Si un elemento ya está en el conjunto seen, significa que es un duplicado, por lo que se agrega a la lista duplicates. De lo contrario, el elemento se agrega al conjunto seen.
    • Finalmente, la función devuelve la lista duplicates.
  4. Ejecute el script utilizando el siguiente comando en su terminal:

    python duplicates.py

    Debería ver la siguiente salida:

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

    Esta salida muestra la lista original y los números duplicados encontrados en la lista.

Comparar len() con len(set())

En este paso, exploraremos una forma más eficiente de detectar duplicados en una lista utilizando la función len() y la estructura de datos set(). Este método aprovecha el hecho de que los conjuntos (sets) solo almacenan elementos únicos.

Comprender len() y set()

  • len(): Esta función devuelve el número de elementos en una lista o cualquier otro objeto iterable.
  • set(): Esta función convierte una lista (o cualquier iterable) en un conjunto (set). Un conjunto es una colección de elementos únicos, lo que significa que elimina automáticamente cualquier duplicado.

Cómo Funciona

La idea central es comparar la longitud de la lista original con la longitud del conjunto creado a partir de esa lista. Si las longitudes son diferentes, significa que había duplicados en la lista original.

Ejemplo

Modifiquemos el archivo duplicates.py que creamos en el paso anterior para utilizar este enfoque.

  1. Abra el archivo duplicates.py en su directorio ~/project utilizando VS Code.

  2. Modifique el código para que sea el siguiente:

    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.")

    Explicación:

    • La función has_duplicates ahora simplemente compara la longitud de la lista original data con la longitud del conjunto creado a partir de data.
    • Si las longitudes son diferentes, la función devuelve True (lo que significa que hay duplicados), de lo contrario devuelve False.
  3. Ejecute el script utilizando el siguiente comando en su terminal:

    python duplicates.py

    Debería ver la siguiente salida:

    The list contains duplicates.

    Si cambia la lista numbers a [1, 2, 3, 4, 5], la salida será:

    The list does not contain duplicates.

Este método es más conciso y a menudo más eficiente que el método anterior, especialmente para listas grandes.

Usar collections.Counter

En este paso, exploraremos una forma aún más poderosa y "pythonica" de contar duplicados utilizando la clase collections.Counter. Esta clase está específicamente diseñada para contar la frecuencia de elementos en una lista u otro iterable.

Comprender collections.Counter

La clase collections.Counter es una subclase de dict que está especialmente diseñada para contar objetos hashables. Almacena los elementos como claves de diccionario y sus conteos como valores de diccionario.

Cómo Funciona

collections.Counter cuenta automáticamente las ocurrencias de cada elemento en una lista. Luego, puedes acceder fácilmente a los conteos para identificar los duplicados.

Ejemplo

Modifiquemos el archivo duplicates.py en tu directorio ~/project para usar collections.Counter.

  1. Abre el archivo duplicates.py en tu directorio ~/project utilizando VS Code.

  2. Modifica el código para que sea el siguiente:

    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)

    Explicación:

    • Importamos la clase Counter del módulo collections.
    • La función find_duplicates_counter crea un objeto Counter a partir de la lista de entrada data. Esto cuenta automáticamente las ocurrencias de cada elemento.
    • Luego, usamos una comprensión de lista para crear una lista de elementos que tienen un conteo mayor que 1 (es decir, duplicados).
  3. Ejecuta el script utilizando el siguiente comando en tu terminal:

    python duplicates.py

    Deberías ver la siguiente salida:

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

    Esta salida muestra la lista original y los números duplicados encontrados en la lista. Observa que el enfoque de Counter solo devuelve los valores duplicados únicos, no todas las ocurrencias de los duplicados.

Resumen

En este laboratorio, comenzamos definiendo los duplicados como valores repetidos dentro de un conjunto de datos y destacando su impacto en la precisión de los datos, la eficiencia de almacenamiento y el rendimiento. Luego, creamos un script de Python para identificar duplicados en una lista utilizando una función find_duplicates.

La función itera a través de la lista de entrada, utilizando un set llamado seen para hacer un seguimiento de los elementos encontrados. Si un elemento ya está en seen, se identifica como un duplicado y se agrega a la lista duplicates. Este enfoque aprovecha la propiedad de valores únicos de los conjuntos (sets) para detectar duplicados de manera eficiente.