728x90
๋ฌธ์ ์ค๋ช
์ ์ ์(Gene)๋ ๋จ๋ฐฑ์ง๋ก ๋ฒ์ญ๋ ์ ์๋ DNA์ ์์ญ์ ์๊ธฐํ๋ค. ๋ชจํฐํ(Motif)๋ ์ ์ ์์ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์๋ DNA์ ์์ ๋จ์์ธ๋ฐ ๋ชจํฐํ ์์ด์ ์ ๋ณด์กด๋ผ ์์ด ๋ชจํฐํ๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ์ข ๊ฐ์ DNA ์ ์ฌ์ฑ์ ํ์ธ ํ ์ ์๋ค.
์ด๋ฒ ๋ฌธ์ ์์๋ ์ฌ๋ฌ DNA ์์ด๋ค ๊ฐ์ ๊ณต์ ํ๊ณ ์๋ ์ต๋ํ ๊ธด ๋ชจํฐํ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค(๋ชจํฐํ๊ฐ ๊ธธ์๋ก ๊ณต์ ํ๋ ๊ธฐ๋ฅ ๋ํ ๋ ์ ์ฌํ๋ค๊ณ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค!).
๋ฌธ์ (Finding a Shared Motif)
์ต๋ 100๊ฐ์ DNA ์์ด( <= 1kbp)์ด FASTA ํ์ผ ํฌ๋งท์ผ๋ก ์ฃผ์ด์ก์ ๋ ๋ชจ๋ DNA ์์ด์ด ๊ณต์ ํ๊ณ ์๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ์ถ๋ ฅํ์์ค.
์์
>Rosalind_1
GATTACA
>Rosalind_2
TAGACCA
>Rosalind_3
ATACA
์์ ๊ฒฐ๊ณผ
AC
ํด๊ฒฐ
def find_kmers(seq, k):
return sorted([seq[i:i+k] for i in range(len(seq)-k+1)], reverse=True)
def find_shared_motif(dnas):
dnas = sorted(dnas, key=lambda x: len(x))
motifs = [dnas[0]]
k = len(dnas[0])
while motifs:
motif = motifs.pop()
included = 1
for dna in dnas:
if motif not in dna:
included = 0
break
if included:
break
if not motifs and k-1 > 0:
k -= 1
motifs = find_kmers(dnas[0], k)
return motif
dnas = []
with open("rosalind_lcsm.txt", "r") as f:
lines = f.readlines()
seq = ''
for line in lines:
if line.startswith(">"):
if seq:
dnas.append(seq)
seq = ''
else:
seq += line.strip()
print(find_shared_motif(dnas))
'๐งฌ Biology > ๋ฐ์ด์ค ์ฝ๋ฉ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ROSALIND] DNA์ ์ธํธ๋ก (intron) ์์ญ ์ ๊ฑฐ ํ ๋จ๋ฐฑ์ง๋ก ๋ฒ์ญ (0) | 2023.05.27 |
---|---|
[ROSALIND] ๋จ๋ฐฑ์ง ์ง๋ ๊ตฌํ๊ธฐ (0) | 2023.05.26 |
[ROSALIND] ๋จ๋ฐฑ์ง motif ์ฐพ๊ธฐ (0) | 2023.05.23 |
์ ๊ทํํ์ Regular Expression (0) | 2023.05.23 |
URL๋ก FASTA ์์ด ๊ฐ์ ธ์ค๊ธฐ (0) | 2023.05.22 |
๋๊ธ