Agrupando una lista de enteros con valores más cercanos.

Tengo una lista:

d = [23,67,110,25,69,24,102,109] 

¿Cómo puedo agrupar los valores más cercanos con una brecha dinámica y crear una tupla como esta, cuál es el método más rápido? :

 [(23,24,25),(67,69),(102,109,110)] 

Me gusta

 d = [23,67,110,25,69,24,102,109] d.sort() diff = [y - x for x, y in zip(*[iter(d)] * 2)] avg = sum(diff) / len(diff) m = [[d[0]]] for x in d[1:]: if x - m[-1][0] < avg: m[-1].append(x) else: m.append([x]) print m ## [[23, 24, 25], [67, 69], [102, 109, 110]] 

En primer lugar, calculamos una diferencia promedio entre elementos secuenciales y luego agrupamos elementos cuya diferencia es menor que el promedio.