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만 뽑아 적용해야 한다.

 

반응형