2010-06-01 6 views
19

gibt es eine eingebaute Funktion zur Berechnung der Überlappung zwischen zwei diskreten Intervallen, z. die Überlappung zwischen [10, 15] und [20, 38]? In diesem Fall ist die Überlappung 0. Wenn es [10, 20], [15, 20], die Überlappung 5.eingebaute Funktion für die Berechnung Überlappung in Python

+0

Meinst du, wenn Sie die Überlappung zwischen [10,25] und [20,38] wollen, dass das Ergebnis [20,25] sein sollte? – Marc

+0

Was meinst du mit Überlappung? Bitte geben Sie ein Beispiel für das erwartete Ergebnis. –

+3

gibt es Überlappungen zwischen [10,15] und [20,38]? – joaquin

Antwort

50

Sie können mit max und 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

scheint ziemlich ordentlich –

+0

, wenn die Intervalle impliziert werden, um exklusiv auf den ersten Wert und inklusive auf der zweiten (oder so ähnlich) zu sein, würde dies eine '+ 1' benötigen die Subtraktion. –

+0

es funktioniert ziemlich gut – Evgeny

9

Check out 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 Weil ich von diesem Modul nichts wusste, obwohl es vielleicht übertrieben ist, wenn er es nur für diese eine Berechnung braucht. –

+1

Das OP suchte nach einer "eingebauten Funktion". – Johnsyweb

+0

Ich denke, obwohl die Dokumentation die gleiche ist, hat sich das Modul leicht verändert. Das 'interval'-Objekt hat kein Attribut mit dem Namen' interval'anonymous mehr ... –

Verwandte Themen