2010-06-01 15 views
19

jest wbudowana funkcja obliczania nakładki między dwoma dyskretnymi interwałami, np. nakładanie się między [10, 15] i [20, 38]? W takim przypadku zakład jest 0. Jeśli to [10, 20], [15, 20], zakładka jest 5.wbudowana funkcja obliczania nakładek w Pythonie

+0

Czy masz na myśli to, że jeśli chcesz pokryć się między [10,25] a [20,38], wynik powinien wynosić [20,25]? – Marc

+0

Co masz na myśli? Podaj przykład oczekiwanego wyniku. –

+3

występuje nakładka między [10,15] a [20,38]? – joaquin

Odpowiedz

50

Można użyć max i min:

>>> 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

wydaje się całkiem schludny –

+0

chyba że odstępy są domyślnie wyłączone na pierwszej wartości i włącznie na drugim (lub coś podobnego ...), to potrzebowałoby '+ 1' do odejmowanie. –

+0

to działa całkiem dobrze – Evgeny

9

odjazdu 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 Ponieważ nie wiedziałem o tym module, choć może to być przesada, jeśli potrzebuje tego do tego jednego obliczenia. –

+1

PO szukał "wbudowanej funkcji". – Johnsyweb

+0

Myślę, że chociaż dokumentacja jest taka sama, moduł nieco się zmienił. Obiekt 'interval' nie ma żadnego atrybutu o nazwie' interval'anymore ... –

Powiązane problemy