有一段DNA序列s滔灶,統(tǒng)計四種堿基的個數(shù)
這個是Rosalind的第一題 http://rosalind.info/problems/dna/
常規(guī)處理方法糟红,使用str.count()
函數(shù)
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
自動映射函數(shù)后再解包
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]
關(guān)于map
和解包的基礎(chǔ)知識猪贪,可以見參考下面的鏈接
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
還有一種處理方法,調(diào)用collections.counter
函數(shù)
In[19]: from collections import Counter
...: c = Counter(s)
...: print(c["A"], c["C"], c["G"], c["T"])
20 12 17 21