Saltar al contenido principal

Buscar Duplicados

Encuentra todos los elementos que aparecen más de una vez en una lista. Aprende a usar sets y diccionarios para resolver problemas de frecuencia.

set dict Counter comprensión de listas collections

El problema

Escribe una función buscar_duplicados(lista) que devuelva una lista con todos los elementos que aparecen más de una vez, sin repetirlos en el resultado.

El orden de la lista resultado no importa.

Ejemplos

listaresultado
[1, 2, 3, 2, 4, 3][2, 3]
["a", "b", "a", "c", "b"]["a", "b"]
[1, 2, 3][]
[5, 5, 5][5]

Código inicial

def buscar_duplicados(lista):
    # Tu código aquí
    pass


print(buscar_duplicados([1, 2, 3, 2, 4, 3]))         # [2, 3]
print(buscar_duplicados(["a", "b", "a", "c", "b"]))  # ["a", "b"]
print(buscar_duplicados([1, 2, 3]))                   # []

Concepto clave: sets y diccionarios para frecuencia

Un set almacena elementos únicos. Un dict puede contar cuántas veces aparece cada elemento:

# Contar frecuencias manualmente
frecuencias = {}
for elemento in lista:
    frecuencias[elemento] = frecuencias.get(elemento, 0) + 1

# Alternativa con Counter
from collections import Counter
frecuencias = Counter(lista)  # Counter({2: 2, 3: 2, 1: 1, 4: 1})

Versión con dos sets (sin Counter)

def buscar_duplicados_sets(lista):
    vistos = set()
    duplicados = set()
    for elemento in lista:
        if elemento in vistos:
            duplicados.add(elemento)
        else:
            vistos.add(elemento)
    return list(duplicados)

Esta versión es O(n) en tiempo y espacio, igual que la versión con Counter.

Próximos pasos

  • Modifica la función para que devuelva también cuántas veces aparece cada duplicado: {elemento: count}
  • ¿Cómo lo harías si la lista fuera muy grande y no cupiera en memoria? Investiga el concepto de streaming y procesamiento en chunks