我想编写代码来替换一些参数

时间:2017-11-05 23:33:32

标签: python

我的代码开头是这样的:

complementDNA = originalDNA.replace('a' , 't' , 't' , 'a')

它在运行

时说
  complementDNA = originalDNA.replace('a' , 't' , 't' , 'a')
TypeError: replace() takes at most 3 arguments (4 given)

4 个答案:

答案 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')