I have a list:
d = [23,67,110,25,69,24,102,109]
how can i group nearest values with dynamic gap, and create a tuple like this, what is the fastest method? :
[(23,24,25),(67,69),(102,109,110)]
Like
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]]
Fist we calculate an average difference between sequential elements and then group together elements whose difference is less than average.
d = [1,2,4,5]
then m
becomes [[1], [2], [4], [5]]
instead of [[1, 2], [4, 5]]
. I think this can be fixed by changing diff
to diff = [data[i+1]-data[i] for i in range(len(data)-1)]
and the condition to x - m[-1][-1] < avg
- unutbu 2012-04-04 19:32