data = [1,2,3,5,11,12,13,15,22,25,27,30]
# divide it into blocks like [[a .. a+10], [b .. b+10], ...]
result = []
block = None
for d in data:
if block:
if d <= hi:
# belongs to current block
block.append(d)
else:
# start a new block
result.append(block) # finish previous block
block = [d] # start new block
lo, hi = d, d + 10 # reset endpoints for new block
else:
# special handling for first value encountered
block = [d]
lo, hi = d, d + 10
# cleanup
if block:
result.append(block)
# result = [[1, 2, 3, 5, 11], [12, 13, 15, 22], [25, 27, 30]]
# find midpoint for each block
mid_points = [(block[0] + block[-1]) // 2 for block in result]
# mid_points = [6, 17, 27]