我的代码开头是这样的:
complementDNA = originalDNA.replace('a' , 't' , 't' , 'a')
它在运行
时说 complementDNA = originalDNA.replace('a' , 't' , 't' , 'a')
TypeError: replace() takes at most 3 arguments (4 given)
答案 0 :(得分:1)
假设originalDNA
是一个字符串,那么我认为你不想替换,你想翻译,即:
originalDNA = 'atgta' # Know nothing about DNA btw
complement_table = str.maketrans('at', 'ta')
complementDNA = originalDNA.translate(complement_table)
# complementDNA is now 'tagat'
为了给出一个简短的解释,maketrans至少需要2个参数,最多3个。前两个参数是相等长度的字符串,其中第一个参数的每个字符将被第二个参数中相同位置的字符替换。可选的第三个参数是包含您要删除的字符的其他字符串。
因此,例如str.maketrans('ac', 'ca', 'b')
会将'a'
替换为'c'
,将'c'
替换为'a'
并删除所有'b'
。
'abccba'.translate(str.maketrans('ac', 'ca', 'b'))
将'caac'
答案 1 :(得分:0)
Replace有两个参数。替换(之前,之后)。 你必须为' a'并且' t'单独和为'到了'分别。那不会给出正确的答案。你可以做到这一点的一种方法是将DNA转换为一个字符列表并迭代它们,然后手动检查以转换“a”字样。到了'并且' t'到了'。像这样
DNAlist = []
for character in originalDNA:
DNAlist.append(character)
for i in range(0, len(DNAlist)):
if DNAlist[i] == 'a':
DNAlist [i] = 't'
elif DNAlist[i] == 't':
DNAlist[i] = 'a'
# Convert the list back to string
DNAstring = ''.join(DNAlist)
虽然我建议使用列表,直到你必须将DNA转换为字符串。字符串在python中是不可变的,即它们不能被改变,每次都是新的。因此,字符串操作可能很昂贵。
答案 2 :(得分:0)
如果您阅读了str.replace
的文档,那么您将知道它会替换第二个参数出现的所有第一个参数。
要使用str.replace
计算给定DNA链的互补DNA链,您必须执行以下操作:
dna = "atgcgctagctcattt"
# Replace A by T and T by A.
cdna = dna.replace('a', 'x')
cdna = cdna.replace('t', 'a')
cdna = cdna.replace('x', 't')
# Replace G by C and C by G.
cdna = cdna.replace('g', 'x')
cdna = cdna.replace('c', 'g')
cdna = cdna.replace('x', 'c')
然而,使用str.translate可能更有效:
dna = "atgcgctagctcattt"
map = str.maketrans("atgc", "tacg")
cdna = dna.translate(map)
类似于Jose的答案。在这两种情况下,结果都是:
cdna = "tacgcgatcgagtaaa"
我希望这会对你有所帮助。
答案 3 :(得分:0)
方法str.replace()只接受三个参数,要替换的字符串和要替换的时间(空白以替换所有时间)。你无法同时改变它们。尝试:
complementDNA = originalDNA.replace('a' , 'x').replace('t', 'a').replace('x', 't')