【发布时间】:2014-06-20 08:39:23
【问题描述】:
我正在尝试将一系列基因组坐标合并为连续范围,并提供一个用于跨间隙合并的附加选项。
例如,如果我有[[0, 1000], [5, 1100]] 的基因组范围,我希望结果是[0, 1100]。如果偏移选项设置为100,并且输入为[[0, 1000], [1090, 1000]],我将再次希望结果为[0, 1100]。
我已经实现了一种执行此操作的方法,该方法依次遍历对齐并尝试在上一个结束位置和下一个起始位置上合并,但由于实际结果的长度不同,它失败了。例如,我的列表中有[[138, 821],[177, 1158], [224, 905], [401, 1169]] 的结果,按起始位置排序。答案应该是[138, 1169],但我得到的是[[138, 1158], [177, 905], [224, 1169]]。显然,我需要考虑的不仅仅是上一个结尾和下一个开始,但我还没有找到一个好的解决方案(最好不是一个巨大的 if 语句巢)。有人有什么建议吗?
def overlap_alignments(align, gene, overlap):
#make sure alignments are sorted first by chromosome then by start pos on chrom
align = sorted(align, key = lambda x: (x[0], x[1]))
merged = list()
for i in xrange(1, len(align)):
prv, nxt = align[i-1], align[i]
if prv[0] == nxt[0] and prv[2] + overlap >= nxt[1]:
start, end = prv[1], nxt[2]
chrom = prv[0]
merged.append([chrom, start, end, gene])
return merged
【问题讨论】:
标签: python algorithm bioinformatics