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()
,而四个碱基就是序列,等于每一个元素放进去调用一次。至于外面的*
用于输出可迭代对象,并且以空格分隔,正好与题目所给的格式相契合。????虽然大佬的精简写法一时不一定能学会,但是积累得越多,以后肯定用得上!
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 汇讲-勇于突破
- 生命过客——第10章|生命过客——第10章 初为人母
- 回忆曾经看过的小说
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 绘本讲师训练营【18期】14/21《我的情绪小怪兽》故事会新体验
- 2018.03.18
- (全员向连载)云间当铺(一)
- 美之初体验—我所感受到的那一点儿
- 如果我的人生能从初中重新开始