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.