Может быть сделано без каких-либо циклов:
import numpy as np
arr = np.array([[1.03, 1.1 ],
[1.12, 1.25],
[2.02, 2.09],
[2.15, 3.79],
[4.73, 4.8 ],
[4.89, 5.06],
[5.28, 5.35],
[5.67, 5.91],
[6.5 , 6.57],
[6.68, 9.1 ]])
toMerge = (arr[1:,0]-arr[:-1,1])<0.5 # flag neighbours to merged
breaks = np.insert(toMerge==False,0,False) # lines not merged with previous
starts = np.insert(np.argwhere(breaks),0,0) # indexes of start lines
ends = np.append(starts[1:],breaks.size)-1 # indexes of end lines for merges
result = arr[starts] # keep only start lines
result[:,1] = arr[ends,1] # assign merged end values
вывод:
print(result)
[[1.03 1.25]
[2.02 3.79]
[4.73 5.91]
[6.5 9.1 ]]
примечание: это исправляет проблемы с моим предыдущим ответом
Если вы не используете numpy, для получения результата можно использовать простой l oop:
result,prevEnd = arr[:1],arr[0][1]
for line in arr[1:]:
start,end = line
if start-prevEnd<0.5: result[-1][1] = end
else: result.append(line)
prevEnd = end
Это будет хорошо работать на Python списках списков, но будет быть очень неэффективным на numpy массивах