Encontrar grupos de números en una lista
Estoy luchando con eso, ya que estoy seguro de que una docena de bucles no es la solución para este problema:
Hay una lista ordenada de números como
numbers = [123, 124, 128, 160, 167, 213, 215, 230, 245, 255, 257, 400, 401, 402, 430]
y quiero crear un dictado con listas de números, en donde la diferencia de los números (que se siguen) no sea mayor que 15. Por lo tanto, la salida sería esta:
clusters = {
1 : [123, 124, 128],
2 : [160, 167],
3 : [213, 215, 230, 245, 255, 257],
4 : [400, 401, 402],
5 : [430]
}
Mi solución actual es un poco fea (tengo que eliminar los duplicados al final ...), estoy seguro de que se puede hacer de forma pitónica.
Esto es lo que hago ahora:
clusters = {}
dIndex = 0
for i in range(len(numbers)-1) :
if numbers[i+1] - numbers[i] <= 15 :
if not clusters.has_key(dIndex) : clusters[dIndex] = []
clusters[dIndex].append(numbers[i])
clusters[dIndex].append(numbers[i+1])
else : dIndex += 1