2018-06-29(生信第7题目)
2018-06-29 本文已影响27人
天秤座的机器狗
本次题目来自Rosalind

对于多行的fasta序列,计算GC含量,并将最大的GC 含量打印出来。
因为这道题并不是简单的计算各个序列的GC,而是要选出最大的GC含量,所以用到了排序的方法,这里主要的一个新的知识点就是关于字典的排序,用itemgetter包可以对字典按key或value排序
先说说如果只是计算GC含量怎么写:

这个是没有用字典的方式,用了18行代码,而且最后一个序列在循环里面是没办法处理,需要在循环外补2行代码
所以,考虑用字典的方法,就是将序列名字和对应序列构建成一个字典,并且序列会连接成一行,然后遍历字典,对value作GC含量的处理,最后打印序列名和gc含量:

这样只用了15行代码,并且不用对最后一个序列做特殊处理就能完成。而且能看出来,字典是无序的。所以真正到本题,如果用到字典就需要itemgetter这个包了。
先看看我最开始没用字典是怎么做的:

将所有的GC含量算出来存到列表中,然后岁列表取最大值。可以看出,是可以计算的。但是有一个问题,没办法打印出来对应的序列,所以这个方法不可取。
必须用到字典
即对第二个脚本B做一些修改即可,在脚本B中再加一个字典,在遍历字典并计算GC含量时,同时将序列名字和GC含量存入另一个字典
然后对新的字典排序,按key排序

sorted(dict.items(),key=itemgetter(1))
这里“1”是指按从低到高排
如果是“0”则是从高往低排
因为排序后的字典是有序的,所以可以利用索引取出来需要的值
以上。