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 = 0

for n in seq:
    if n == 'A':
        countA += 1
    if n == 'C':
        countC += 1
    if n == 'G':
        countG += 1
    if n == 'T':
        countT += 1

print str(countA) + ' ' + str(countC) + ' ' + str(countG) + ' ' + str(countT)

    也有大佬一行命令搞定:

print(*map(input().count, "ACGT"))

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

你可能感兴趣的:(Day34-Rosalind初体验(1))