2010-06-01 65 views
19

là có chức năng được tích hợp để tính toán sự chồng chéo giữa hai khoảng thời gian rời rạc, ví dụ: sự chồng chéo giữa [10, 15] và [20, 38]? Trong trường hợp đó sự chồng chéo là 0. Nếu nó [10, 20], [15, 20], sự chồng chéo là 5.được xây dựng trong chức năng để tính toán chồng lên nhau trong Python

+0

Bạn có nghĩa là nếu bạn muốn chồng chéo giữa [10,25] và [20,38], kết quả phải là [20,25]? – Marc

+0

Bạn có ý nghĩa gì? Xin vui lòng cho một ví dụ về kết quả mong đợi. –

+3

có sự chồng chéo giữa [10,15] và [20,38]? – joaquin

Trả lời

50

Bạn có thể sử dụng tối đa và tối thiểu:

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

này có vẻ khá gọn gàng –

+0

trừ khi các khoảng được ngụ ý là độc quyền trên giá trị đầu tiên và bao gồm vào thứ hai (hoặc cái gì đó như thế ...), điều này sẽ cần một '+ 1' để phép trừ. –

+0

nó hoạt động khá tốt – 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 Vì tôi không biết về mô-đun đó, mặc dù nó có thể quá mức cần thiết nếu anh ta chỉ cần nó cho phép tính này. –

+1

OP đang tìm "chức năng tích hợp". – Johnsyweb

+0

Tôi nghĩ rằng mặc dù tài liệu là như nhau, nhưng mô-đun đã thay đổi một chút. Đối tượng 'interval' không có bất kỳ thuộc tính nào có tên' interval'anymore ... –

Các vấn đề liên quan