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
| lista | resultado |
|---|---|
[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