0

文字列内のコドンをアミノ酸に変換しようとしています。

これは私が現在持っているものです:

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

ただし、機能していません。最後のコドンを置き換えるだけです。

4

4 に答える 4

2

Python では、replace関数は新しい文字列を返します。あなたがしているのは、元の文字列を取得し、置換を行い、結果を として保存することaminoacidosです。再度呼び出すと、元の変更されていない文字列を再度replace呼び出すため、前の反復の結果は保持されません。replace

aminoacidos次のように再利用する必要があります。

aminoacidos = rna

for tripleto, cambio in dicionario.iteritems():
    aminoacidos = aminoacidos.replace(tripleto, cambio)
return aminoacidos
于 2013-06-11T01:50:32.390 に答える
2

あなたのループでは、変更しませんaminoacidos。繰り返しごとに再設定し続けるだけです。

置換は機能するように見えるかもしれません、置換の順序によって違いが生じます。ucuuuc例として取り上げます。最初に を置き換えるucuと、 になりますSuuc。ただし、cuu最初に見つかった場合は が得られuLuc、それ以降の置換が壊れます。

代わりに、文字列を 3 つのチャンクで繰り返し処理し、辞書で各文字列を検索する必要があります。

# 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])
于 2013-06-11T01:51:42.070 に答える
1

ビルトインのTemplateクラスを調べることもできます。これは、基本的にここでやりたいことを正確に実行します。

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'
于 2013-06-11T03:18:23.970 に答える
0

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
于 2013-06-11T01:50:15.080 に答える