有一段DNA序列s,统计四种碱基的个数
这个是Rosalind的第一题 http://rosalind.info/problems/dna/
常规处理方法,使用str.count()
函数
In[9]: s='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
In[10]: def nt_stat(s):
...: return s.count("A"), s.count("G"), s.count("C"), s.count("T")
...:
In[11]: nt_stat(s)
Out[11]: (20, 17, 12, 21)
酷炫一点的处理方法,map
自动映射函数后再解包
In[12]: print(*map(s.count,'AGCT'))
20 17 12 21
# map处理后返回的是一个可迭代的map对象
In[14]: map(s.count,'AGCT')
Out[14]: <map at 0x2390aef8128>
In[15]: list(map(s.count,'AGCT'))
Out[15]: [20, 17, 12, 21]
# 其实和序列生成式大同小异
In[17]: [s.count(x) for x in 'AGCT']
Out[17]: [20, 17, 12, 21]
关于map
和解包的基础知识,可以见参考下面的链接
http://www.runoob.com/python/python-func-map.html
http://www.cnblogs.com/cnhkzyy/p/9410658.html
https://blog.csdn.net/qq_41235053/article/details/81673748
还有一种处理方法,调用collections.counter
函数
In[19]: from collections import Counter
...: c = Counter(s)
...: print(c["A"], c["C"], c["G"], c["T"])
20 12 17 21