Я хочу определить координаты и длины перекрывающихся частей между каждой парой интервалов. Это можно сделать следующим образом:
Код: Выделить всё
# a small list for clarity, with length normally around 5000s
cList = ((20, 54), (25, 48), (67, 133), (90,152), (140,211), (190,230))
for i, c1 in enumerate(cList[:-1]): # a linear pairwise combination
for c2 in cList[i + 1:]:
left = max(c1[0], c2[0])
right = min(c1[1], c2[1])
overlap = right - left
if overlap > 0:
print "left: %s, right: %s, length: %s" % (left, right, overlap)
Код: Выделить всё
left: 25, right: 48, length: 23
left: 90, right: 133, length: 43
left: 140, right: 152, length: 12
left: 190, right: 211, length: 21
Код: Выделить всё
if c1[1] < c2[0]:
break
Я уверен, что есть какой-то математический трюк, чтобы решить эту проблему.
Подробнее здесь: https://stackoverflow.com/questions/232 ... -intervals
Мобильная версия