Day34-Rosalind初体验(1)

????之前在公司时就发现了Rosalind这个神奇的网站,作为生信的python入门练习简直是Perfect。不过那时没有太多时间去做这种练习题,最近在做数据处理时发现几乎快把python都忘完了,赶紧捡起来回顾一下,今天看看第一题。
Counting DNA Nucleotides ????第一个问题相对来说比较简单,题目会随机生成一段DNA序列,需要在五分钟内上传A、C、G、T四种碱基分别有多少个。

#Sample Dataset AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC#Sample Output 20 12 17 21

????这样的问题放在python中,只需一个方法就可以搞定,那就是count()
????count() 方法用于统计字符串里某个字符出现的次数,可选参数为在字符串搜索的开始与结束位置。它的语法如下:
str.count(sub, start= 0,end=len(string))

????在这题当中,并不需要什么特别的技巧,我采用了最笨最懒的办法,就是直接在python命令行中输入。
>>> a="AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC" >>> print(a.count("A")) 20 >>> print(a.count("C")) 12 >>> print(a.count("G")) 17 >>> print(a.count("T")) 21

????果然简单粗暴,适合我这样半吊子还失忆的新手司机!
????光速搞定之后,我开始浏览答案区大佬们的脚本,事实证明,只要你的python水平够高,多简单的题目都可以秀,有的时候学习其他人的脚本也能够提升自己。
????有跟我一样的耿直型,写得比课本还规整,一看就是处女座,这个格式要表扬一下:
seq = open('rosalind_dna.txt', 'r') seq = seq.read()countA = 0 countC = 0 countG = 0 countT = 0for n in seq: if n == 'A': countA += 1 if n == 'C': countC += 1 if n == 'G': countG += 1 if n == 'T': countT += 1print str(countA) + ' ' + str(countC) + ' ' + str(countG) + ' ' + str(countT)

????也有大佬一行命令搞定:
print(*map(input().count, "ACGT"))

【Day34-Rosalind初体验(1)】????我查了一下他的这种写法,map()会根据提供的函数对指定序列做映射。第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。
????在这里,function函数就是对输入序列所做的count(),而四个碱基就是序列,等于每一个元素放进去调用一次。至于外面的*用于输出可迭代对象,并且以空格分隔,正好与题目所给的格式相契合。
????虽然大佬的精简写法一时不一定能学会,但是积累得越多,以后肯定用得上!

    推荐阅读