Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于字典替换字符串_Python_Replace - Fatal编程技术网

Python 基于字典替换字符串

Python 基于字典替换字符串,python,replace,Python,Replace,我试图把我的字符串中的密码子转换成氨基酸 这就是我目前拥有的: def converteRNAmParaAminoacidos(rna): dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V'

我试图把我的字符串中的密码子转换成氨基酸

这就是我目前拥有的:

def converteRNAmParaAminoacidos(rna):
    dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V', 'gug':'V', 'ucu':'S', 'ucc':'S', 'uca':'S', 'ucg':'S', 'ccu':'P', 'ccc':'P', 'cca':'P', 'ccg':'P', 'acu':'T', 'acc':'T', 'aca':'T', 'acg':'T', 'gcu':'A', 'gcu':'A', 'gcc':'A', 'gca':'A', 'gcg':'A', 'uau':'T', 'uac':'T', 'uaa':'*', 'uag':'*', 'cau':'H', 'cac':'H', 'caa':'G', 'cag':'G', 'aau':'N', 'aac':'N', 'aaa':'K', 'aag':'K', 'gau':'D', 'gac':'D', 'gaa':'E', 'gag':'E', 'ugu':'C', 'ugc':'C', 'uga':'*', 'ugg':'W', 'cgu':'R', 'cgc':'R', 'cga':'R', 'cgg':'R', 'agu':'S', 'agc':'S', 'aga':'R', 'agg':'R', 'ggu':'G', 'ggc':'G', 'gga':'G', 'ggg':'G'}
    for i,j in dicionario.iteritems():
        aminoacidos=rna.replace(i,j)
    return aminoacidos

但是,它不起作用,它只替换最后一个密码子。

您只将最后一个替换保存到
aminoacidos
变量中。我更改了您的代码以替换
rna
字符串,并将其设置为
rna
。它应该会起作用

def converteRNAmParaAminoacidos(rna):
    dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V', 'gug':'V', 'ucu':'S', 'ucc':'S', 'uca':'S', 'ucg':'S', 'ccu':'P', 'ccc':'P', 'cca':'P', 'ccg':'P', 'acu':'T', 'acc':'T', 'aca':'T', 'acg':'T', 'gcu':'A', 'gcu':'A', 'gcc':'A', 'gca':'A', 'gcg':'A', 'uau':'T', 'uac':'T', 'uaa':'*', 'uag':'*', 'cau':'H', 'cac':'H', 'caa':'G', 'cag':'G', 'aau':'N', 'aac':'N', 'aaa':'K', 'aag':'K', 'gau':'D', 'gac':'D', 'gaa':'E', 'gag':'E', 'ugu':'C', 'ugc':'C', 'uga':'*', 'ugg':'W', 'cgu':'R', 'cgc':'R', 'cga':'R', 'cgg':'R', 'agu':'S', 'agc':'S', 'aga':'R', 'agg':'R', 'ggu':'G', 'ggc':'G', 'gga':'G', 'ggg':'G'}
    for i,j in dicionario.iteritems():
        rna = rna.replace(i, j)
    return rna

您只将最后一次替换保存到
aminoacidos
变量。我更改了您的代码以替换
rna
字符串,并将其设置为
rna
。它应该会起作用

def converteRNAmParaAminoacidos(rna):
    dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V', 'gug':'V', 'ucu':'S', 'ucc':'S', 'uca':'S', 'ucg':'S', 'ccu':'P', 'ccc':'P', 'cca':'P', 'ccg':'P', 'acu':'T', 'acc':'T', 'aca':'T', 'acg':'T', 'gcu':'A', 'gcu':'A', 'gcc':'A', 'gca':'A', 'gcg':'A', 'uau':'T', 'uac':'T', 'uaa':'*', 'uag':'*', 'cau':'H', 'cac':'H', 'caa':'G', 'cag':'G', 'aau':'N', 'aac':'N', 'aaa':'K', 'aag':'K', 'gau':'D', 'gac':'D', 'gaa':'E', 'gag':'E', 'ugu':'C', 'ugc':'C', 'uga':'*', 'ugg':'W', 'cgu':'R', 'cgc':'R', 'cga':'R', 'cgg':'R', 'agu':'S', 'agc':'S', 'aga':'R', 'agg':'R', 'ggu':'G', 'ggc':'G', 'gga':'G', 'ggg':'G'}
    for i,j in dicionario.iteritems():
        rna = rna.replace(i, j)
    return rna

在Python中,
replace
函数返回一个新字符串。您要做的是获取原始字符串,进行替换,并将结果存储为
aminoacidos
。当您再次调用
replace
时,您没有保留以前迭代的结果,因为您再次对原始的未更改字符串调用
replace

您需要重复使用
aminoacidos
如下:

aminoacidos = rna

for tripleto, cambio in dicionario.iteritems():
    aminoacidos = aminoacidos.replace(tripleto, cambio)
return aminoacidos

在Python中,
replace
函数返回一个新字符串。您要做的是获取原始字符串,进行替换,并将结果存储为
aminoacidos
。当您再次调用
replace
时,您没有保留以前迭代的结果,因为您再次对原始的未更改字符串调用
replace

您需要重复使用
aminoacidos
如下:

aminoacidos = rna

for tripleto, cambio in dicionario.iteritems():
    aminoacidos = aminoacidos.replace(tripleto, cambio)
return aminoacidos

在您的循环中,您不需要修改
氨基酸OS
。您只需在每次迭代中不断重新设置它

虽然更换看起来会奏效,但更换的顺序会有所不同。以
ucuuuc
为例。如果您首先更换
ucu
,最终将得到
Suuc
。但是,如果您首先找到
cuu
,您将得到
uloc
,这将中断后续替换

您应该以三个一组的方式迭代字符串,并在字典中查找每个字符串:

# I'd choose a better variable name
dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V', 'gug':'V', 'ucu':'S', 'ucc':'S', 'uca':'S', 'ucg':'S', 'ccu':'P', 'ccc':'P', 'cca':'P', 'ccg':'P', 'acu':'T', 'acc':'T', 'aca':'T', 'acg':'T', 'gcu':'A', 'gcu':'A', 'gcc':'A', 'gca':'A', 'gcg':'A', 'uau':'T', 'uac':'T', 'uaa':'*', 'uag':'*', 'cau':'H', 'cac':'H', 'caa':'G', 'cag':'G', 'aau':'N', 'aac':'N', 'aaa':'K', 'aag':'K', 'gau':'D', 'gac':'D', 'gaa':'E', 'gag':'E', 'ugu':'C', 'ugc':'C', 'uga':'*', 'ugg':'W', 'cgu':'R', 'cgc':'R', 'cga':'R', 'cgg':'R', 'agu':'S', 'agc':'S', 'aga':'R', 'agg':'R', 'ggu':'G', 'ggc':'G', 'gga':'G', 'ggg':'G'}

def converteRNAmParaAminoacidos(rna):
    aminoacidos = ''

    for i in range(0, len(rna), 3):
        aminoacidos += dicionario[rna[i:i + 3]]

    return aminoacidos
或者更简洁地说:

def converteRNAmParaAminoacidos(rna):
    return ''.join([dicionario[rna[i:i + 3]] for i in range(0, len(rna), 3])

在您的循环中,您不需要修改
氨基酸OS
。您只需在每次迭代中不断重新设置它

虽然更换看起来会奏效,但更换的顺序会有所不同。以
ucuuuc
为例。如果您首先更换
ucu
,最终将得到
Suuc
。但是,如果您首先找到
cuu
,您将得到
uloc
,这将中断后续替换

您应该以三个一组的方式迭代字符串,并在字典中查找每个字符串:

# I'd choose a better variable name
dicionario = {'uuu':'F', 'uuc':'F','uua':'L', 'uug':'L', 'cuu':'L', 'cuc':'L', 'cua':'L', 'cug':'L', 'auu':'I', 'auc':'I', 'aua':'I', 'aug':'M', 'guu':'V', 'guc':'V', 'gua':'V', 'gug':'V', 'ucu':'S', 'ucc':'S', 'uca':'S', 'ucg':'S', 'ccu':'P', 'ccc':'P', 'cca':'P', 'ccg':'P', 'acu':'T', 'acc':'T', 'aca':'T', 'acg':'T', 'gcu':'A', 'gcu':'A', 'gcc':'A', 'gca':'A', 'gcg':'A', 'uau':'T', 'uac':'T', 'uaa':'*', 'uag':'*', 'cau':'H', 'cac':'H', 'caa':'G', 'cag':'G', 'aau':'N', 'aac':'N', 'aaa':'K', 'aag':'K', 'gau':'D', 'gac':'D', 'gaa':'E', 'gag':'E', 'ugu':'C', 'ugc':'C', 'uga':'*', 'ugg':'W', 'cgu':'R', 'cgc':'R', 'cga':'R', 'cgg':'R', 'agu':'S', 'agc':'S', 'aga':'R', 'agg':'R', 'ggu':'G', 'ggc':'G', 'gga':'G', 'ggg':'G'}

def converteRNAmParaAminoacidos(rna):
    aminoacidos = ''

    for i in range(0, len(rna), 3):
        aminoacidos += dicionario[rna[i:i + 3]]

    return aminoacidos
或者更简洁地说:

def converteRNAmParaAminoacidos(rna):
    return ''.join([dicionario[rna[i:i + 3]] for i in range(0, len(rna), 3])

您可能还想查看内置类,它基本上正是您在这里想要做的事情

from string import Template
s = Template('$who likes $what')
s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
d = {'who':'tom', 'what':'moo shoo'}
s.substute(d) #pass same keywords as a dictionay
'tom likes moo shoo'

您可能还想查看内置类,它基本上正是您在这里想要做的事情

from string import Template
s = Template('$who likes $what')
s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
d = {'who':'tom', 'what':'moo shoo'}
s.substute(d) #pass same keywords as a dictionay
'tom likes moo shoo'

@DaveChen
replace
返回修改过的副本。调用
a.replace()
不会改变a.@DaveChen
replace
返回一个修改过的副本。调用
a.replace()
不会改变a.ah谢谢,它可以工作!对于变量,我很抱歉,当我发布代码xDD时,我忘记了从葡萄牙语翻译名称。不过,只有一个问题,如果用户不输入3的倍数的rna,它将不起作用,对吗?如果核苷酸的数目不是完美的,我怎么能让它仍然被翻译而忽略呢?啊,谢谢,它是有效的!对于变量,我很抱歉,当我发布代码xDD时,我忘记了从葡萄牙语翻译名称。不过,只有一个问题,如果用户不输入3的倍数的rna,它将不起作用,对吗?如果核苷酸数不是完美的,我怎么能让它仍然翻译并忽略呢?谢谢你的帮助,iurisilvio,但我不能让它那样工作=(谢谢你的帮助,iurisilvio,但我不能让它那样工作=(JoZas,谢谢你的帮助!但是我试过了,代码是在中间翻译密码子的,有些还没有翻译。我不知道xDjozzas发生了什么,谢谢你的帮助!但是我试过了,代码是在中间翻译密码子的,有些还没有翻译。我不知道XDeodox到底发生了什么,这很有趣,我是。我从来没有听说过模板类,我会尝试使用它,谢谢!:)theodox,这很有趣,我是一个编程高手,我从来没有听说过模板类,我会尝试使用它,谢谢!:)