https://rosalind.info/problems/grph/
ROSALIND | Overlap Graphs
It appears that your browser has JavaScript disabled. Rosalind requires your browser to be JavaScript enabled. Overlap Graphs solved by 12057 2012년 7월 2일 12:00:00 오전 by Rosalind Team Topics: Graph Algorithms A Brief Introduction to Graph Theory N
rosalind.info
이 문제는 Ok에서 k만큼 각 서열이 끝부분과 시작부분이 겹치는지 알아내는 문제이다. 여기선 O3이므로 앞뒤로 3씩 잘라서 비교해본다. 예를 들어본다면 0498은 AAATAAA 이고 2391은 AAATTTT이므로 서로 오버랩된다고 본다. 이 문제 또한 이러한 점만 안다면 차분하게 코딩해서 풀면 된다.
from Bio import SeqIO
from collections import defaultdict
seq_list = SeqIO.parse(r'파일경로','fasta')
fdic={}#앞부분 저장 id:서열
edic=defaultdict(list)#뒷부분 저장 서열:id
for seq in seq_list:#서열을 돌면서
sid=seq.id
sseq=str(seq.seq)
front , end = sseq[:3],sseq[-3:]
fdic[sid]=front
edic[end]=edic[end]+[sid]
for id1 in fdic.keys():#앞부분의 id를 돌면서
if fdic[id1] in edic.keys():#그 id의 앞서열과 똑같은 뒷서열이 있다면
for id2 in edic[fdic[id1]]:#그 뒷서열의 id를 돌면서
if id1 == id2:#같은 서열은 제외
continue
print(id2,id1)#출력
'문제해결(PS) > ROSALIND' 카테고리의 다른 글
Finding a Shared Motif(공유 모티브 찾기) (0) | 2024.08.04 |
---|---|
Calculating Expected Offspring ( 기대 자식 계산하기) (0) | 2024.07.28 |
Mortal Fibonacci Rabbits(수명이 있는 피보나치 토끼들) (0) | 2024.07.27 |
Consensus and Profile(공통서열과 프로파일) (0) | 2024.07.26 |
Mendel's First Law(맨델의 첫 번째 법칙) (0) | 2024.07.21 |