5SOO_O 의 개발 공부 일지
[Python] [Rosalind] Locating Restriction Sites 본문
길이가 4~12 사이인 문자열의 reverse palindrome을 구해야 한다.
1. 다운 받은 파일을 열어서, >Rosalind 라벨을 제외 한 염기 서열 만 담는다.
with open("rosalind_revp.txt") as file:
read = file.read().splitlines()
dna = ""
for d in read:
if d.startswith(">"):
pass
else:
dna += d
2. 상보적인 염기 서열을 구한다.
complement = {"A":"T", "C":"G", "G":"C", "T":"A"}
dna_com=''
for d in dna:
dna_com += complement[d]
3. dna를 검사하는데,
0번째 인덱스 문자 ~ (j=4) 4번째 인덱스 문자까지, 1번째 ~ (j=4) 4번째, 2번째 ~ (j=4) 4번째, 마지막 인덱스 ~ (j=4) 4번째 문자까지 검사 했을 때 palindrome 이면 출력하고,
1번째 인덱스 문자 ~ (j=5) 5번째 인덱스, 2번째~(j=5), 3번째~(j=5) 5 번째, .... 마지막 인덱스 문자~(j=5) 5번째 인덱스 문자까지
2번째 인덱스 ~ (j=6) 6번째, 3번째 인덱스 ~ (j=6) 6번째, 4번째 인덱스 ~ (j=6) 6번째, ...., 마지막 인덱스 ~ (j=6) 6번째 문자까지
쭉쭉쭉 j 가 12일 때 까지 검사한다.
for i in range(len(dna)-4+1):
j = 4
while j <= 12:
# i~i+j번째 서열이 i~i+j 번째 dna를 뒤집은 것과 같다면
if dna[i:i+j] == (dna_com[i:i+j])[::-1]:
if i + j < len(dna):
print(i + 1, j)
else:
print(i + 1, len(dna) - i)
i += 1
j += 1
전체 코드
with open("rosalind_revp.txt") as file:
read = file.read().splitlines()
dna = ""
for d in read:
if d.startswith(">"):
pass
else:
dna += d
complement = {"A":"T", "C":"G", "G":"C", "T":"A"}
dna_com=''
for d in dna:
dna_com += complement[d]
for i in range(len(dna)-4+1):
j = 4
while j <= 12:
if dna[i:i+j] == (dna_com[i:i+j])[::-1]:
if i + j < len(dna):
print(i + 1, j)
else:
print(i + 1, len(dna) - i)
i += 1
j += 1
이 때 출력되는 i 값은 palindrome이 있는 위치이며,
j 값은 palindrome이 있는기 검사하기 위해 묶은 염기 서열 길이이다.
if dna[i:i+j] == (dna_com[i:i+j])[::-1]:
if i + j < len(dna):
print(i + 1, j)
else:
print(i + 1, len(dna) - i)
i += 1
dna를 가른 다음 뒤집은게 dna를 가른 것과 같다면
인덱스와 dna를 가를 길이를 더한 값이 dna전체 길이보다 작은지 검사한다. ( 주어진 염기 서열을 넘지 않도록 )
주어진 dna 범위 내라면, 얻은 값을 그대로 출력하면 되고,
palindrome인데 주어진 범위를 벗어나면, palindrome이 시작하는 위치와 전체 길이에서 palindrome이 있는 위치를 뺀 값을 출력한다. ( palindrome이 있는 위치와 끝 인덱스에서 그 위치 까지의 길이 )
'자료구조 및 바이오 인포매틱스' 카테고리의 다른 글
| [Python] [Rosalind] RNA Splicing (0) | 2022.04.14 |
|---|---|
| [Python] [Rosalind] Calculating Protein Mass (0) | 2022.04.14 |
| [Bioinformatics] 코돈-단백질 테이블, 단백질 질량 테이블 (0) | 2022.04.14 |
| [Python] [Rosalind] Enumerating Gene Orders (0) | 2022.04.14 |
| [Python] [Rosalind] Independent Alleles (0) | 2022.04.12 |