Rosalind
[DNA] Counting DNA Nucleotides
hyunss
2022. 11. 21. 18:13
[DNA] Counting DNA Nucleotides
위 문제는 단순히 주어진 DNA sequence에서 ATGC nucleotide의 개수를 각각 구하는 문제이다.
가장 먼저 떠오르는 방법은 for 문을 사용해 sequence를 하나하나 읽으면서 해당 nucleotide의 count를 1씩 늘리는 방법이다.
예를 들어
file = open('dna.txt', 'r')
dna = file.readline()
A = 0
T = 0
G = 0
C = 0
for nuc in dna:
if nuc == 'A':
A += 1
elif nuc == 'T':
T += 1
elif nuc == 'G':
G += 1
else: C += 1
print(A, C, G, T)
close(dna)
다음과 같이 dna 파일에서 하나 하나 읽어 A, T, G, C 각각 매칭을 통해 점수를 매기는 방식이다.
하지만 이 경우 if 문이 너무 길어지며 사전에 A, T, G, C라는 변수를 따로 지정해주는 등 코드 작성에서 비효율적이다.
이를 더 효율적으로 코드를 작성해보면
with open('dna.txt') as dna:
nuc = dna.read()
A = nuc.count('A')
T = nuc.count('T')
G = nuc.count('G')
C = nuc.count('C')
print(A, C, G, T)
다음과 같이 작성했을 때 처음 코드보다 훨씬 간결하고 보기 쉬워진 것을 볼 수 있다.
우선 with문을 사용할 경우 파일을 열었을 때 with문이 끝남과 동시에 자동으로 닫히기 때문에 close를 사용하지 않아도 되며 연 파일을 as를 통해 dna라는 변수에 저장하는 과정을 한 줄에 작성했다.
또한 for문과 if문을 쓰지 않고 read를 통해 파일의 내용을 nuc이라는 변수에 저장한 뒤 count 함수를 사용해 nuc 변수 내에서 A,T,G,C에 대한 각각의 count를 계산하였다.
물론 실제로 사용하려면 fasta 파일 양식에 맞춰 strip 함수를 사용하는 등의 과정을 거쳐 DNA string만 뽑아 적용해야 한다.
반응형