2010-06-01 12 views
19

Esiste una funzione incorporata per calcolare la sovrapposizione tra due intervalli discreti, ad es. la sovrapposizione tra [10, 15] e [20, 38]? In tal caso la sovrapposizione è 0. Se è [10, 20], [15, 20], la sovrapposizione è 5.built in funzione per il calcolo della sovrapposizione in Python

+0

Vuoi dire che se vuoi la sovrapposizione tra [10,25] e [20,38], che il risultato dovrebbe essere [20,25]? – Marc

+0

Cosa intendi con sovrapposizione? Si prega di fornire un esempio del risultato atteso. –

+3

c'è sovrapposizione tra [10,15] e [20,38]? – joaquin

risposta

50

È possibile utilizzare max e 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

sembra piuttosto pulito –

+0

a meno che gli intervalli siano impliciti per essere esclusivi sul primo valore e inclusi sul secondo (o qualcosa del genere ...), questo avrebbe bisogno di un '+ 1' per la sottrazione. –

+0

funziona abbastanza bene – Evgeny

9

Partenza 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 Perché non sapevo di quel modulo, anche se potrebbe essere eccessivo se ha solo bisogno di questo calcolo. –

+1

L'OP stava cercando "una funzione integrata". – Johnsyweb

+0

Penso che sebbene la documentazione sia la stessa, il modulo è leggermente cambiato. L'oggetto 'interval' non ha alcun attributo chiamato' interval' ancora ... –

Problemi correlati