生信小练习01:统计DNA中核苷酸数量

Problem
string is simply an ordered collection of symbols selected from some alphabet and formed into a word; the length of a string is the number of symbols that it contains.
An example of a length 21 DNA string (whose alphabet contains the symbols 'A', 'C', 'G', and 'T') is "ATGCTTCAGAAAGGTCTTACG."
Given: A DNA string of length at most 1000 nt.
Return: Four integers (separated by spaces) counting the respective number of times that the symbols 'A', 'C', 'G', and 'T' occur in 
Sample Dataset
f='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'counts = []for i in ['A','C','G','T']:counts.append(f.count(i))#str.count(sub,start=0,end=len(str)print '\t'.join(map(str,counts))#join() 方法用于将(序列中的元素)以.join前指定的元素连接生成一个新的字符串。#map(str,counts):['20', '12', '17', '21']

  

AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
Sample Output
20 12 17 21
我的方法:
第一开始我把最后一个if写成了else: g.append(i)。len(g)=58。远远大于实际结果。错误的原因在于,esle对应的是上一个if,所以统计的是非C的数量
f='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
a = []
t = []
c = []
g = []
for i in f:
if i =='A': a.append(i) if i =='T': t.append(i) if i =='C': c.append(i) if i =='G': g.append(i) print len(a) print len(t) print len(c) print len(g)

原博主的方法:

方法一:

f='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
for i in f:
 b = list(f)
 c = {}
for i in b : c[i] = b.count(i)#对c里的key进行赋值,c = {'A': 20, 'C': 12, 'T': 21, 'G': 17} print c.values()

方法二:

f='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
counts = []
for i in ['A','C','G','T']:
counts.append(f.count(i))#str.count(sub,start=0,end=len(str)
print '\t'.join(map(str,counts))#join() 方法用于将(序列中的元素)以.join前指定的元素连接生成一个新的字符串。#map(str,counts):['20', '12', '17', '21']

如果以上代码复制后运行出现错误,请修改下空格和缩进

  

posted @ 2018-11-25 20:22  Rachel_Zhu  阅读(535)  评论(0编辑  收藏  举报