Python中计算重叠的内置函数

39 投票
8 回答
40560 浏览
提问于 2025-04-15 23:26

有没有什么内置的函数可以计算两个离散区间之间的重叠,比如说计算[10, 15]和[20, 38]之间的重叠部分?在这种情况下,重叠部分是0。如果是[10, 20]和[15, 20],那么重叠部分就是5。

8 个回答

4

这里有一个很不错的函数,来自于Aaron Quinlan的chrom_sweep,我对它进行了修改,以适应你的区间表示。这个函数会返回两个区间重叠的碱基对(bp)数量,如果没有重叠的话,它会返回一个负数,表示它们之间的距离。

def overlaps(a, b):
    """
    Return the amount of overlap, in bp
    between a and b.
    If >0, the number of bp of overlap
    If 0,  they are book-ended.
    If <0, the distance in bp between them
    """

    return min(a[1], b[1]) - max(a[0], b[0])
17

可以看看 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])
93

你可以使用最大值和最小值的功能:

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

撰写回答