我試圖將一系列基因組座標合併爲連續範圍,並有一個用於合併間隙的附加選項。將重疊的數字範圍合併爲連續的範圍
例如,如果我有基因組範圍[[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