擅长:python、mysql、java
<p>功能替代品:)。这可能会跑得更快。很明显,由于函数式编程的优点,它对RAM非常友好,并且可以很容易地并行化。我希望你会觉得学习起来很有趣。你知道吗</p>
<pre><code>from itertools import imap, izip, ifilter, repeat
def closest_point(position, interval):
""":rtype: tuple[int, int]""" # closest interval point, distance to it
position_in_interval = interval[0] <= position <= interval[1]
closest = min([(border, abs(position - border)) for border in interval], key=lambda x: x[1])
return closest if not position_in_interval else (closest[0], 0) # distance is 0 if position is inside an interval
def closest_interval(exons, pos):
""":rtype: tuple[tuple[int, int], tuple[int, int]]"""
return min(ifilter(lambda x: x[1][1], izip(exons, imap(closest_point, repeat(pos, len(exons)), exons))),
key=lambda x: x[1][1])
print(closest_interval(exons['NM_015665'], 449))
</code></pre>
<p>这个指纹</p>
<pre><code>((356, 441), (441, 8))
</code></pre>
<p>第一个元组是一个范围。第二个元组中的第一个整数是间隔中最近的点,第二个整数是距离。你知道吗</p>