Grouping a list of integers with nearest values

后端 未结 1 1371
情深已故
情深已故 2020-12-06 13:27

I have a list:

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

how can I group nearest values with a dynamic gap, and create a tuple like this, wha

相关标签:
1条回答
  • 2020-12-06 13:33

    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.

    0 讨论(0)
提交回复
热议问题