Этот вопрос касается интервального сравнения вложенных целочисленных интервалов.
Предположим, три диапазона целых чисел, которые я для простоты называю целевыми диапазонами. Эти целевые диапазоны никогда не перекрываются, но могут иметь разную длину.
> target1 = range(1,10000)
> target2 = range(10001,20000)
> target3 = range(20001,25000)
Далее предположим другой диапазон, который я называю тестовым диапазоном, который всегда имеет меньшую длину, чем любой из целевых диапазонов, но который может переходить в соседний целевой диапазон.
> test1 = range(900,5000) # entirely in target1
> test2 = range(9900,10500) # mostly in target2, but crosses into target1
Есть ли функция Python, которая помогает определить, в какие целевые диапазоны попадает тестовый диапазон? В случае, если испытательный диапазон пересекает соседний целевой диапазон, должен быть указан только тот целевой диапазон, на который приходится наибольшая часть испытательного диапазона.
> sought_function(test1, [target1, target2, target3])
# 1
> sought_function(test2, [target1, target2, target3])
# 2
ИЗМЕНИТЬ 1:
Какой код вы бы использовали при отсутствии стандартной функции Python для интервального сравнения вложенных целочисленных интервалов? Ниже приведен быстрый и неуклюжий код Python для функции под названием nested_in_which, которую, безусловно, можно улучшить.
def nested_in_which(test, targets):
for n, t in enumerate(targets):
if test[0] in t and test[-1] in t:
return(n)
else:
if test[0] in t and n < len(targets) and test[-1] in targets[n+1]:
return(n+1) # Overlap comparison not yet implemented