En este curso aprenderás a identificar y manejar elementos duplicados en Python, una habilidad esencial
para el procesamiento y limpieza de datos.
¿Por qué es importante?
Los datos duplicados pueden afectar los resultados de análisis
Pueden consumir recursos innecesarios
Pueden indicar problemas en la recolección de datos
Ejemplo práctico:
Imagina una lista de correos electrónicos de usuarios donde algunos están repetidos. Necesitamos
identificar estos duplicados para enviar un solo correo a cada usuario.
2. Conceptos Básicos
Para identificar duplicados, necesitamos entender algunas estructuras de datos en Python:
Listas en Python
Las listas son colecciones ordenadas y mutables que permiten elementos duplicados.
# Crear una lista
frutas = ["manzana", "banana", "naranja", "manzana", "uva"]
# Acceder a elementos
print(frutas[0]) # Output: manzana
for item in lista:
if item in unicos:
duplicados.add(item)
else:
unicos.add(item)
return list(duplicados)
# Ejemplo de uso
lista = [1, 2, 3, 2, 4, 5, 1, 6, 7, 1]
print(encontrar_duplicados(lista)) # Output: [1, 2]
Método 2: Usando collections.Counter
from collections import Counter
def encontrar_duplicados(lista):
conteo = Counter(lista)
return [item for item, count in conteo.items() if count > 1]
# Ejemplo de uso
lista = ['a', 'b', 'c', 'a', 'd', 'e', 'b']
print(encontrar_duplicados(lista)) # Output: ['a', 'b']
Método 3: Usando list.count()
def encontrar_duplicados(lista):
duplicados = []
for item in lista:
if lista.count(item) > 1 and item not in duplicados:
duplicados.append(item)
return duplicados
# Ejemplo de uso
lista = [10, 20, 30, 20, 40, 10, 50]
print(encontrar_duplicados(lista)) # Output: [10, 20]
Cuestionario
1. ¿Cuál método es más eficiente para listas grandes?
4. Aplicación Completa para Encontrar Duplicados
Ahora implementaremos una aplicación completa que permite al usuario ingresar datos y encontrar
duplicados.
Encuentra Duplicados en tus Datos
Ingresa tus elementos separados por comas (ej: manzana,banana,naranja,manzana):
// JavaScript para la aplicación
function findDuplicates() {
const input = document.getElementById('input-data').value;
const items = input.split(',').map(item => item.trim());
const unique = new Set();
const duplicates = new Set();
// Registrar las posiciones de cada elemento
items.forEach((item, index) => {
if (!itemPositions[item]) {
itemPositions[item] =
[];
}
itemPositions[item].push(index);
});
for usuario in usuarios:
email = usuario["email"]
if email in emails:
duplicados.append(emails[email])
duplicados.append(usuario)
else:
emails[email] = usuario
print("Usuarios con email duplicado:", duplicados)
2. Encontrar Duplicados en Archivos
import hashlib
def hash_file(filepath):
"""Calcula el hash MD5 de un archivo"""
hash_md5 = hashlib.md5()
with open(filepath, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
def encontrar_archivos_duplicados(directorio):
import os
hashes = {}
duplicados = []
for root, dirs, files in os.walk(directorio):
for filename in files:
filepath = os.path.join(root,
filename)
file_hash =
hash_file(filepath)
if file_hash in hashes:
duplicados.append((filepath,
hashes[file_hash]))
else:
hashes[file_hash]
= filepath
return duplicados
# Ejemplo de uso
# duplicados = encontrar_archivos_duplicados('/ruta/al/directorio')
# for dup in duplicados:
# print(f"Archivo duplicado: {dup[0]} es igual a {dup[1]}")
# Ejemplo de uso
# duplicados = encontrar_duplicados_en_db('mi_base_de_datos.db')
# for email, count in duplicados:
# print(f"Email {email} aparece {count} veces")
Cuestionario Final
1. ¿Cuál es la forma más eficiente de encontrar duplicados en una lista muy grande?
2. Para encontrar archivos duplicados, ¿qué propiedad debemos comparar?