美文网首页
Day34-Rosalind初体验(1)

Day34-Rosalind初体验(1)

作者: 腐草为嘤 | 来源:发表于2019-08-23 22:44 被阅读0次

        之前在公司时就发现了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)

          本文链接:https://www.haomeiwen.com/subject/yeyxectx.html