게놈 좌표 범위를 연속 범위로 병합하려고합니다. 간격을 통해 병합하는 추가 옵션이 있습니다.겹치는 숫자 범위를 연속 범위로 병합
예를 들어, 게놈 범위가 [[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