精华内容
下载资源
问答
  • 目录反向序列函数互补序列方法1:用字典dictionary互补序列方法2:python3 translate()方法互补序列方法3:最原始方法,用多个if分支互补序列方法4:对字符串调用replace()互补序列方法5: ASCII码作为列表下标测试...

    1 写在前面的絮絮叨叨

    一个练习:用python尽量多种方法来实现DNA反向互补序列。

    DNA反向互补序列简单来说就是把序列先倒序读取一次,然后将ATGC对应转换为TACG。

    所以把这个过程拆分为反向序列函数和互补序列函数。

    python自带的倒序读取方法已经很原始很优秀了,留给我们发挥空间不大,所以重点来看求互补序列可以用哪些骚操作。

    1. 首先思路肯定是建立字典再进行字符转换啦【方法1】。

    2. translate()是python自带的函数,其实也是建立映射表来实现字符转换,效率很高【方法2】。

    3. 最最最原始的方法是用多个if分支来逐个字符判断和替换【方法3】。

    4. 也看到有其它博客提到用replace()来实现(Python实现DNA序列互补、反向、反向互补),但是用replace()时要注意对序列的大小写做一点处理,下文再细说【方法4】。

    5. 还看到一种用C语言思路实现的方法(生信(二)反向互补序列),是利用了数组的下标对应字符的ASCII码,数组存储互补序列【方法5】。

    6. 用replace()构造带{}的替换域,然后利用format对替换域进行替换,妙啊(python编程,获取一段序列的反向互补序列,需要多种方法)【方法5】

    如果你还有其它新思路,欢迎留言。
    下面马上开始实践吧。

    2 反向序列函数

    def DNA_reverse(sequence):
        return sequence[::-1]  # 求反向序列
    

    3 互补序列函数

    互补序列方法1:用字典dictionary

    字典方法很好理解啦,不多说了

    # 互补序列方法1:用字典dictionary
    def DNA_complement1(sequence):
        # 构建互补字典
        comp_dict = {
            "A":"T",
            "T":"A",
            "G":"C",
            "C":"G",
            "a":"t",
            "t":"a",
            "g":"c",
            "c":"g",
        }
        #求互补序列
        sequence_list = list(sequence)
        sequence_list = [comp_dict[base] for base in sequence_list]
        string = ''.join(sequence_list)
        return string
    

    互补序列方法2:python3 translate()方法

    python3自带的str.maketrans(intab, outtab)函数,建立从intab到outtab的映射表。
    再用translate(trantab)根据映射表来进行字符转换。
    translate()用法参考:https://docs.python.org/zh-cn/3.7/library/stdtypes.html?highlight=translate#str.translate

    	# 互补序列方法2:python3 translate()方法
    def DNA_complement2(sequence):
        trantab = str.maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh')     # trantab = str.maketrans(intab, outtab)   # 制作翻译表
        string = sequence.translate(trantab)     # str.translate(trantab)  # 转换字符
        return string
    

    互补序列方法3:最原始方法,用多个if分支

    # 互补序列方法3:最原始方法,用多个if分支
    def DNA_complement3(sequence):
        sequence_list = list(sequence)
        str = []
        for base in sequence_list:
            if base == "A":
                str.append('T')
            elif base == "T":
                str.append('A')
            elif base == "G":
                str.append('C')
            elif base == "C":
                str.append('G')
            elif base == "a":
                str.append('t')
            elif base == "t":
                str.append('a')
            elif base == "g":
                str.append('c')
            elif base == "c":
                str.append('g')
        string = ''.join(str)
        return string
    

    互补序列方法4:对字符串调用replace()

    这个方法要注意2个小问题。
    1.DNA序列是有大小写的,要先用列表记录原始序列的大小写情况。

    seq = "ATGATATAGtatatatgCAAGAGg"  # 原始序列样例
    

    2.replace()是对字符串进行操作,如果先将字符串A转换成T,再将T转换成A的时候就会出问题,此时原始的T和由A转换的T都会被转换掉。解决思路是,先将原始序列都用upper()转换成大写,A->t,T->a,C->g,G->c,就不会出现问题。最后再将原始序列大写的位置转换回大写。

    # 互补序列方法4:对字符串调用replace()
    def DNA_complement4(sequence):
        sequence_list = list(sequence)
        upper_index=[]
    
        # 列表upper_index记录哪些位置是小写
        for i in range(len(sequence_list)):
            if sequence_list[i].isupper():
                upper_index.append(i)
    
        # sequence全部转换为大写后求小写的互补序列
        str = sequence.upper()
        str = str.replace('A', 't')
        str = str.replace('T', 'a')
        str = str.replace('C', 'g')
        str = str.replace('G', 'c')
    
        # 将原大写序列设回大写
        str_list = list(str)
        for i in upper_index:
            str_list[i] = str_list[i].upper()
    
        string =''.join(str_list)
        return string
    

    互补序列方法5: ASCII码作为列表下标

    # 互补序列方法5: ASCII码作为列表下标 读取对应互补序列
    def DNA_complement5(sequence):
        # 建立列表存ASCII码(互补序列方法6)
        comp_tab = []
        for i in range(0, 130):
            comp_tab.append(i)
            trantab = str.maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh')
        for base in trantab:
            comp_tab[base] = chr(trantab[base])
    
        # comp_tab列表下标是ASCII码:例如'A'的ASCII码是65,comp_tab[65] = 'T'
    #    comp_tab = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
    #    31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    #     60, 61, 62, 63, 64, 'T', 'V', 'G', 'H', 69, 70, 'C', 'D', 73, 74, 'M', 76, 'K', 78, 79, 80, 81, 'Y', 83, 'A', 85,
    #     'B', 87, 88, 'R', 90, 91, 92, 93, 94, 95, 96, 't', 'v', 'g', 'h', 101, 102, 'c', 'd', 105, 106, 'm', 108, 'k', 110,
    #     111, 112, 113, 'y', 115, 'a', 117, 'b', 119, 120, 'r', 122, 123, 124, 125, 126, 127, 128, 129]
    
        string = []
        for j in range(len(sequence)):
            string += comp_tab[ord(sequence[j])]	#求A
        string = ''.join(string)
        return string
    

    互补序列方法6:replace()构造替换域+format()实现替换

    # 互补序列方法6:replace()构造替换域+format()实现替换
    def DNA_complement6(sequence):
        sequence = sequence.replace('A', '{A}').replace('T', '{T}').replace('C', '{C}').replace('G', '{G}').replace('a', '{a}').replace('t', '{t}').replace('g', '{g}').replace('c', '{c}')
        string = sequence.format(A='T', T='A', C='G', G='C', a='t', t='a', c='g', g='c')
        return string
    

    .replace()构造替换域的过程:
    在这里插入图片描述


    4 测试用例和结果

    # seq = "ATGATATAGtatatatgCAAGAGg"    # 临时测试集
    
    # 生成随机序列作为测试集
    seq=[]
    seq_len = 100000
    for i in range(seq_len):
        seq.append(random.choice('ATGCatgc'))
    seq = ''.join(seq)
    print("原始DNA序列:    seq_len=", seq_len ,"\n", seq, 'len=\n')
    
    # 求反向序列
    seq = DNA_reverse(seq)
    
    # 求互补序列
    print("DNA反向互补序列:")
    for i in [1, 5]:
        begin_time = time()  	# 计时,比较不同方法的性能
        # 依次调用我们写好的6个互补序列函数DNA_complement1/2/3/4/5/6,求结果
        print(eval('DNA_complement'+str(i))(seq))   # eval() 函数用来执行一个字符串表达式,并返回表达式的值。
        end_time = time()
        run_time = end_time - begin_time  
        print('方法', i, '运行时间:', run_time, '\n')
    

    运行结果:
    在这里插入图片描述

    总结

    1. 当序列较短时:运行时间差别不大

    2. 当序列很长很长时:运行时间 方法2 < 方法1 < 方法6 < 方法3 = 方法4 = 方法5

    让这篇文章到你的收藏夹吃灰去吧!
    如果文章对你有帮助,请留言或者点个赞,这将是对我极大的支持,谢谢。
    欢迎评论欢迎评论欢迎评论~

    展开全文
  • complement_table = str.maketrans('ATGCU', 'TACGA') def get_comp(seq): return seq.translate(complement_table) get_comp("CTCCCAGTTTACTATCGCACTGGTCGACTATACCTGTGCC") ...
    complement_table = str.maketrans('ATGCU', 'TACGA')
    
    def get_comp(seq):
        return seq.translate(complement_table)
    
    get_comp("CTCCCAGTTTACTATCGCACTGGTCGACTATACCTGTGCC")
    
    <
    展开全文
  • 碱基互补配对原则是:A 与 T 配对,G 与 C 配对。求 DNA反向互补序列分两步:第一是反向,第二是互补。比如序列“ATGC”,反向就是“CGTA”,再互补就是“GCAT”。给定...

    碱基互补配对原则是:A 与 T 配对,G 与 C 配对。

    求 DNA 的反向互补序列分两步:第一是反向,第二是互补。比如序列“ATGC”,反向就是“CGTA”,再互补就是“GCAT”。

    给定:长度不超过 1000bp 的 DNA 序列。

    需得:其反向互补序列。

    示例数据

    AAAACCCGGT
    

    示例结果

    ACCGGGTTTT
    

    Python 实现

    Complementing_a_Strand_of_DNA.py

    import sys
    
    def reverse_complement(dna):
        revc = ""
        basepair = {'A':'T', 'T':'A', 'G':'C', 'C':'G'}
        for c in dna:
            revc = basepair[c] + revc
        return revc
    
    def test():
        dna = 'AAAACCCGGT'
        return reverse_complement(dna) == 'ACCGGGTTTT'
    
    if __name__ == '__main__':
        if not test():
            print("reverse_complement: Failed")
            sys.exit(1)
    
        with open('rosalind_revc.txt') as fh:
            dna = fh.read()
            revc = reverse_complement(dna.strip().upper())
            print(revc)
    
    • 在 Python 中,是没有 switch 语句的,可以用 if...elif...elif..else 来模拟 switch 语句;而更 pythonic 的做法是用字典来代替。在本题中,你可以尝试用 if...elif...else 来实现反向互补。

    • Python 中的序列反向可以通过切片实现,如 dna_forward[::-1],就得到了其反向序列,再求其互补序列,也可以实现反向互补的需求。

    Problem

    In DNA strings, symbols 'A' and 'T' are complements of each other, as are 'C' and 'G'.

    The reverse complement of a DNA string is the string formed by reversing the symbols of , then taking the complement of each symbol (e.g., the reverse complement of "GTCA" is "TGAC").

    Given: A DNA string of length at most 1000 bp.

    Return: The reverse complement of .

    Sample Dataset

    AAAACCCGGT
    

    Sample Output

    ACCGGGTTTT

    喜欢文章请点个“赞”吧!或者点击“在看”让更多朋友看到,点击“阅读原文”可以在知乎专栏上给我留言,博客地址:https://jianzuoyi.github.io

    展开全文
  • dnaman有什么用dnaman在日常应用的过程中,不仅可以进行多种不同序列之间的对比,同时这款工具还进行了引物设计,同时对一些限制性的酶切分析,能够对智力战能够实现质粒绘图,对蛋白质的各种成分进行分析等等,它...

    dnaman有什么用

    dnaman在日常应用的过程中,不仅可以进行多种不同序列之间的对比,同时这款工具还进行了引物设计,同时对一些限制性的酶切分析,能够对智力战能够实现质粒绘图,对蛋白质的各种成分进行分析等等,它几乎涵盖了日常的各种核酸以及蛋白质序列的分析工作内容。

    dnaman其实就是各种生命研究者和工作者必然要具备的一款专业性的工具,这种工具可以高效的帮助他们展开分析和研究,在功能设定方面,更是通过两个引物互补的方式,借助于互补命令,通过PCR引物设计,可以对各种记录进行导入导出,甚至从文本文件中导入记录。

    dnaman实现反向互补的DNA序列方法

    在这种研究性的工具不断应用的过程中,应该怎样利用它实现反向互补的DNA序列?如果想要达到这样的工作要求,必须要先下载该软件,到本地机上再将安装包下载,在将安装包下载完成之后,需要解压缩处理安装包,点击软件顶部的File,接下来在弹出的对话框中要选择new按钮。

    dnaman需要先新创建对话框中输入DNA序列,输入之后同时按住Ctrl和A,将序列进行选中,接下来需要点击软件上部的“seq”,之后再点击顶部的Sequence选项,在弹出的选项中,需要用户直接选择点击Display,并且在二级菜单中选择点击Rev.Compl.Sequence,通过这种操作方式,可以帮助用户快速得到原序列的反向互补序列。

    展开全文
  • 展开全部一、顺序不同:原序列e5a48de588b63231313335323631343130323136353331333433616234:AATTCCGG,则反向序列为:...二、概念不同:互补的概念就是A-T,C--G配对要将核苷酸序列转换成反向互补序列,需要用DN...
  • Excel实现序列反向互补

    千次阅读 2020-05-10 13:12:16
    最近有需求需要把很多excel里的引物序列反向互补,当然,任何一个编程语言都能解决,可是编个脚本需要一定的时间,而且,跨平台性也不足够好吧。Excel就不一样了,人人电脑里有,天天用,如果能做一些小工具也是很棒...
  • 展开全部一、顺序不同62616964757a686964616fe58685e5aeb931333433616234:原序列:AATTCCGG,则反向序列...二、概念不同:互补的概念就是A-T,C--G配对要将核苷酸序列转换成反向互补序列,需要用DNASTAR软件,其中...
  • 生信(二)反向互补序列

    千次阅读 2018-10-23 15:37:24
    **如何得到一段基因序列的反向互补序列?**这是基因测序领域经常遇到的问题。其实答案很简单,许多现成的软件都有这个功能。但是作为一个生信人,当然可以自己实现一个了。 首先想到的也是最基础的方法就是利用**多...
  • 想通过python2.7 写一段程序,实现 DNA反向互补,如下列字符串:由文本文档1.txt输入(由文档输入是关键) ...
  • 我有一长串DNA序列,我需要找到由间隔序列侧翼的两个回文序列组成的区域。输入是:...
  • 这是一个简单的生信脚本练习,对一段碱基序列切片,然后求反向互补序列。注意其中join 函数的用法#求反向互补序列 lll = [] with open("Program1.txt","r") as f: seq = f.readlines() seq = seq[1] print(seq) ...
  • biopython 处理序列Seq对象和标准的Python字符串有两个明显的不同。首先,它们使用不同的方法。 尽管``Seq``对象支持常规字符串的很多方法,但是它的translate()方法在做 生物学翻译时是不同的。相似的还有其他的...
  • 用 python 实现如下: ... 4 my_dna = "ACTGATCGATTACGTATAGTATTTGCTATCATACATATATATCGATGCGTTCAT" 5 # 由于python 区分大小写,所以先替换成小写可以有效避免后面重复替换的问题。 6 compleme...
  • Shell脚本获得核酸反向互补序列

    千次阅读 2019-10-24 10:42:54
    在生物信息处理时,常常需要得到已知序列的反向互补序列(反向是由于学术界约定俗成序列方向为5端到3端,因此只互补配对得到的是3端到5端的配对序列,还需要再反向一次变成5端到3端),诸如Python和其他专门的小工具...
  • 为什么80%的码农都做不了架构师?>>>   ...print ''.join(["ATCG"["TAGC".index(n)] for n in ...”的反向互补序列 转载于:https://my.oschina.net/renmin/blog/48553
  • 【字符串】DNA反向互补

    千次阅读 2020-01-20 19:19:35
    DNA,即脱氧核糖核酸,是核苷酸的一种,根据其中碱基类型的不同,一个DNA序列可以由腺嘌呤脱氧核糖核苷酸、鸟嘌呤脱氧核糖核苷酸、胞嘧啶脱氧核糖核苷酸和胸腺嘧啶脱氧核糖核苷酸组成,分别由字母A、G、C和T表示。...
  • DNAstar 教程

    2020-12-22 11:33:20
    生物信息基因序列分析软件DNAStar简介郑伟文,林营志,刘波,曹宜,苏明星,朱育菁,蓝江林,车建美,郑斯平,陈坚(福建省农科院生物技术中心)1.设计公司SequenceAnalysisSoftwareforMacintoshandWindows,GETTING...
  • 想通过python2.7 写一段程序,实现 DNA反向互补,如下列字符串:由文本文档1.txt输入(由文档输入是关键) ...
  • 算法:互补DNA-Java

    2019-05-09 21:57:04
    DNA串中,符号“A”和“T”是彼此的互补,如“C”和“G”。你有DNA的一条链(字符串,Haskell除外);你需要获得另一个互补的一面。 DNA链从不是空的或根本没有DNA(再次,除了Haskell)。 例子如下: DnaStrand....
  • 互补DNA(Complementary DNA)

    千次阅读 2018-06-21 13:16:48
    题目描述:在DNA字符串中,符号“A”和“T”是彼此的互补,如“C”和“G”。你有DNA的一个功能(字符串,除了Haskell); 你需要得到另一个互补的一面。 DNA链永远不会是空的或根本没有DNA(再次,除了Haskell)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 444
精华内容 177
关键字:

dna反向互补序列