Grouping a list of integers with nearest values

2020-02-01 04:31发布

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)]

1条回答
来,给爷笑一个
2楼-- · 2020-02-01 05:09

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.

查看更多
登录 后发表回答