5

我有这个用于在 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”

有什么帮助吗?

4

5 回答 5

7

您忘记了 中的return声明revcom。尝试这个:

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

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

于 2013-10-24T15:58:14.727 回答
5

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]
于 2016-07-12T10:59:07.387 回答
4

一个漂亮的逆向补充 DNA 序列的衬线:

revcompl = lambda x: ''.join([{'A':'T','C':'G','G':'C','T':'A'}[B] for B in x][::-1])
print revcompl("AGTCAGCAT")
于 2014-07-19T22:46:36.087 回答
1

您需要returnrevcom().

于 2013-10-24T15:58:18.903 回答
0
`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)`
于 2015-08-24T07:31:43.683 回答