美文网首页
2018-06-27(生信第6题)

2018-06-27(生信第6题)

作者: 天秤座的机器狗 | 来源:发表于2018-06-27 21:02 被阅读23次

    这一题来自Rosalind

    求DNA序列的反向互补序列

    想到的方法是将每行序列读入到字符串,再逐个判断,如果是A就换成T,如果是T就换成A,G就换成C,C就换成G,然后打印反向序列

    于是,写了如下的脚本:

    这个脚本运行是没有问题的,如下:

    写脚本的过程中遇到几个问题:

    1.字符串里的单个字母或者其他是没有办法被赋值的,也就是说,想换掉字符串中的某个字母的话,需要将字符串先转换成列表,用到list(string),然后再赋值替换就可以了

    2.python中if语句等都是要加冒号的,而awk命令则不需要。

    3.python中应该是不支持i++这种写法,就用i+=1好了。

    4.list.reverse()可以将列表元素反向排列

    5.' '.join(list)可以将列表连成字符串

    6.import sys

      args=sys.argv

     file =args[1]  #这一行特别容易写错

    我的脚本写的没问题,是可以运行的,但是一定有值得优化的地方

    比如出现的4个判断语句就很累赘

    所以考虑可以用字典的方式,

    将待转换的碱基存为key,转换后的碱基存为value,构成一个字典。然后将原始序列转换成列表并取反向序列后,遍历列表并取字典的value值存入列表即可,

    可见,代码少了很多行。需要注意和记住的一种写法traslineL=[transDict[i] for i in lineL],这种将某个列表遍历,并将每个元素转换成字典的值存入列表。这种方式在《生信第一题》中也提到过

    可以写成

    当然,对列表中加元素的原始方法是先建一个空列表,然后利用list.append()追加,注意这个函数是不返回值的,和list.reverse()很像。这种方法,我写了一个例子:

    最后,关于此题我在生信技能数上看到一种特别简单的方法,有关于maketrans的方法,另外还有个知识点:

    切片操作[::-1],从头到尾,步长是-1,切,得到反向序列

    对字符串取反向就用这个,列表取反向就用list.reverse()

    以上。

    相关文章

      网友评论

          本文标题:2018-06-27(生信第6题)

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