2010-06-01 15 views
19

hay una función incorporada para calcular la superposición entre dos intervalos discretos, p. la superposición entre [10, 15] y [20, 38]? En ese caso, la coincidencia es 0. Si se trata de [10, 20], [15, 20], el solapamiento es 5.función incorporada para la superposición informática en Python

+0

¿Quiere decir que si desea la superposición entre [10,25] y [20,38], que el resultado debería ser [20,25]? – Marc

+0

¿Qué quiere decir superposición? Por favor dé un ejemplo del resultado esperado. –

+3

hay una superposición entre [10,15] y [20,38]? – joaquin

Respuesta

50

Puede utilizar máximo y mínimo:

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

parece muy ordenado –

+0

a menos que los intervalos sean implícitos para ser exclusivo en el primer valor e inclusive en el segundo (o algo así ...), esto necesitaría un '+ 1' para la resta –

+0

funciona bastante bien – Evgeny

9

Salida 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 Porque no sabía acerca de ese módulo, aunque podría ser excesivo si solo lo necesita para este cálculo. –

+1

El OP estaba buscando "una función incorporada". – Johnsyweb

+0

Creo que aunque la documentación es la misma, el módulo ha cambiado ligeramente. El objeto 'interval' no tiene ningún atributo llamado' interval'anymore ... –

Cuestiones relacionadas