【问题标题】:Reverse complement DNA反向补体 DNA
【发布时间】:2013-10-24 15:55:32
【问题描述】:

我有这个在 python 中反向互补 DNA 的方程:

def complement(s): 
    basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    letters = list(s) 
    letters = [basecomplement[base] for base in letters] 
    return ''.join(letters)
def revcom(s):
    complement(s[::-1])
print("ACGTAAA")
print(complement("ACGTAAA"[::-1]))
print(revcom("ACGTAAA"))

然而行:

print(complement("ACGTAAA"[::-1]))
print(revcom("ACGTAAA"))

彼此不相等。只有第一行给出了答案。底部只打印“NONE”

有什么帮助吗?

【问题讨论】:

  • 我打赌它打印的是None,而不是"NONE"。这实际上是一个重要的区别。请记住,在寻求调试帮助时,请务必在错误发生时准确报告错误。

标签: python bioinformatics dna-sequence


【解决方案1】:

您忘记了revcom 中的return 语句。试试这个:

def revcom(s):
    return complement(s[::-1])

如果您没有从 Python 中的函数显式返回值,则该函数将返回 None

【讨论】:

    【解决方案2】:

    Python3,包括核苷酸的整个 IUPAC 字母表:

    def revcomp(seq):
        return seq.translate(str.maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh'))[::-1]
    

    在 Python2 中:

    from string import maketrans
    
    def revcomp(seq):
        return seq.translate(maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh'))[::-1]
    

    【讨论】:

      【解决方案3】:

      反向互补 DNA 序列的一个漂亮的衬线:

      revcompl = lambda x: ''.join([{'A':'T','C':'G','G':'C','T':'A'}[B] for B in x][::-1])
      print revcompl("AGTCAGCAT")
      

      【讨论】:

        【解决方案4】:

        你需要returnrevcom()的结果。

        【讨论】:

          【解决方案5】:
          `a = "AAAACCCGGT"
          a= a[::-1]
          print("reverse: "+a)
          a = a.replace('A','a')
          a = a.replace('T','A')
          a = a.replace('a','T')
          a = a.replace('C','c')
          a = a.replace('G','C')
          a = a.replace('c','G')
          print("complement : "+a)`
          

          【讨论】:

            猜你喜欢
            • 2014-10-01
            • 2021-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-20
            • 2013-09-17
            • 1970-01-01
            相关资源
            最近更新 更多