2010-06-01 10 views
19

есть встроенная функция для вычисления перекрытия между двумя дискретными интервалами, например. перекрытие между [10, 15] и [20, 38]? В этом случае перекрытие 0. Если это [10, 20], [15, 20], перекрытие 5.встроенная функция для вычисления перекрытия в Python

+0

Вы хотите сказать, что если вы хотите совпадение между [10,25] и [20,38], то результат должен быть [20,25]? – Marc

+0

Что значит «перекрытие»? Просьба привести пример ожидаемого результата. –

+3

существует перекрытие между [10,15] и [20,38]? – joaquin

ответ

50

Вы можете использовать макс и мин:

>>> def getOverlap(a, b): 
...  return max(0, min(a[1], b[1]) - max(a[0], b[0])) 

>>> getOverlap([10, 25], [20, 38]) 
5 
>>> getOverlap([10, 15], [20, 38]) 
0 
+1

кажется довольно аккуратным –

+0

, если промежутки не подразумеваются как эксклюзивные по первому значению и включительно на втором (или что-то вроде этого ...), для этого потребуется '+ 1' для вычитание. –

+0

это хорошо работает – Evgeny

9

ЗАКАНЧИВАТЬ pyinterval http://code.google.com/p/pyinterval/

import interval 
x=interval.interval[10, 15] 
y=interval.interval[20, 38] 
z=interval.interval[12,18] 

print(x & y) 
# interval() 
print(x & z) 
# interval([12.0, 15.0]) 
+2

+1 Потому что я не знал об этом модуле, хотя он может быть излишним, если он просто нуждается в этом для этого расчета. –

+1

OP искал «встроенную функцию». – Johnsyweb

+0

Я думаю, что хотя документация такая же, модуль немного изменился. Объект 'interval' не имеет никакого атрибута с именем' interval'anymore ... –

Смежные вопросы