python 如何使用字典翻译列表中的多个字符串

eoigrqb6  于 2022-12-25  发布在  Python
关注(0)|答案(3)|浏览(150)

我正在尝试用python中的aa_dict把所有的开放阅读框(ORF)翻译成氨基酸序列,我想知道我怎样才能把列表中的每一个字符串都翻译出来。我很感激你的帮助,谢谢!
long_ORFs列表如下所示:

['ATGAGAGAG', 'AGAGAAGTCT', 'ACACTAGAGAGAGA',......]

这是我的代码:

def translate(long_ORFs):

     aa_dict = {
    'AAA': 'K',  'AAC': 'N',  'AAG': 'K',  'AAT': 'N',  'ACA': 'T',  'ACC': 'T',  
    'ACG': 'T',  'ACT': 'T',  'AGA': 'R',  'AGC': 'S',  'AGG': 'R',  'AGT': 'S',  
    'ATA': 'I',  'ATC': 'I',  'ATG': 'M',  'ATT': 'I',  'CAA': 'Q',  'CAC': 'H',  
    'CAG': 'Q',  'CAT': 'H',  'CCA': 'P',  'CCC': 'P',  'CCG': 'P',  'CCT': 'P',  
    'CGA': 'R',  'CGC': 'R',  'CGG': 'R',  'CGT': 'R',  'CTA': 'L',  'CTC': 'L',  
    'CTG': 'L',  'CTT': 'L',  'GAA': 'E',  'GAC': 'D',  'GAG': 'E',  'GAT': 'D',  
    'GCA': 'A',  'GCC': 'A',  'GCG': 'A',  'GCT': 'A',  'GGA': 'G',  'GGC': 'G',  
    'GGG': 'G',  'GGT': 'G',  'GTA': 'V',  'GTC': 'V',  'GTG': 'V',  'GTT': 'V',  
    'TAA': '*',  'TAC': 'Y',  'TAG': '*',  'TAT': 'Y',  'TCA': 'S',  'TCC': 'S',  
    'TCG': 'S',  'TCT': 'S',  'TGA': '*',  'TGC': 'C',  'TGG': 'W',  'TGT': 'C',  
    'TTA': 'L',  'TTC': 'F',  'TTG': 'L',  'TTT': 'F'  
}
     aaList = [] # an empty list

     if len(long_ORFs) % 3 ==0:

         for i in range(0, len(long_ORFs), 3):

              codon = long_ORFs [ i : i+3]

              aaList += aa_dict[codon]
              
              
     return ''.join(aaList)

translate(long_ORFs)

这将导致空字符串

w46czmvw

w46czmvw1#

代码:-

def translate(long_ORFs):
    aa_dict = {'AAA': 'K',  'AAC': 'N',  'AAG': 'K',  'AAT': 'N',  'ACA': 'T',  'ACC': 'T',  'ACG': 'T',  'ACT': 'T',  'AGA': 'R',  'AGC': 'S',  'AGG': 'R',  'AGT': 'S',  'ATA': 'I',  'ATC': 'I',  'ATG': 'M',  'ATT': 'I',  'CAA': 'Q',  'CAC': 'H',  'CAG': 'Q',  'CAT': 'H',  'CCA': 'P',  'CCC': 'P',  'CCG': 'P',  'CCT': 'P',  'CGA': 'R',  'CGC': 'R',  'CGG': 'R',  'CGT': 'R',  'CTA': 'L',  'CTC': 'L',  'CTG': 'L',  'CTT': 'L',  'GAA': 'E',  'GAC': 'D',  'GAG': 'E',  'GAT': 'D',  'GCA': 'A',  'GCC': 'A',  'GCG': 'A',  'GCT': 'A',  'GGA': 'G',  'GGC': 'G',  'GGG': 'G',  'GGT': 'G',  'GTA': 'V',  'GTC': 'V',  'GTG': 'V',  'GTT': 'V',  'TAA': '*',  'TAC': 'Y',  'TAG': '*',  'TAT': 'Y',  'TCA': 'S',  'TCC': 'S',  'TCG': 'S',  'TCT': 'S',  'TGA': '*',  'TGC': 'C',  'TGG': 'W',  'TGT': 'C',  'TTA': 'L',  'TTC': 'F',  'TTG': 'L',  'TTT': 'F'  }
    aaList = [] # an empty list
    for word in long_ORFs:
        if len(word)%3==0:
            temp=""
            for i in range(0, len(word), 3):
                codon=word[i:i+3]
                temp+=aa_dict[codon]
            aaList.append(temp)      
        else:
            continue
    return aaList

print(translate(['ATGAGAGAG','AGAGAAGTC','ACACTAGAGAGAGA']))

输出:-

['MRE', 'REV']

这2个输出来自前2个字,没有第3个输出,因为第3个字不能被3整除

nqwrtyyt

nqwrtyyt2#

from itertools import zip_longest

aa_dict = {
    'AAA': 'K', 'AAC': 'N', 'AAG': 'K', 'AAT': 'N', 'ACA': 'T', 'ACC': 'T',
    'ACG': 'T', 'ACT': 'T', 'AGA': 'R', 'AGC': 'S', 'AGG': 'R', 'AGT': 'S',
    'ATA': 'I', 'ATC': 'I', 'ATG': 'M', 'ATT': 'I', 'CAA': 'Q', 'CAC': 'H',
    'CAG': 'Q', 'CAT': 'H', 'CCA': 'P', 'CCC': 'P', 'CCG': 'P', 'CCT': 'P',
    'CGA': 'R', 'CGC': 'R', 'CGG': 'R', 'CGT': 'R', 'CTA': 'L', 'CTC': 'L',
    'CTG': 'L', 'CTT': 'L', 'GAA': 'E', 'GAC': 'D', 'GAG': 'E', 'GAT': 'D',
    'GCA': 'A', 'GCC': 'A', 'GCG': 'A', 'GCT': 'A', 'GGA': 'G', 'GGC': 'G',
    'GGG': 'G', 'GGT': 'G', 'GTA': 'V', 'GTC': 'V', 'GTG': 'V', 'GTT': 'V',
    'TAA': '*', 'TAC': 'Y', 'TAG': '*', 'TAT': 'Y', 'TCA': 'S', 'TCC': 'S',
    'TCG': 'S', 'TCT': 'S', 'TGA': '*', 'TGC': 'C', 'TGG': 'W', 'TGT': 'C',
    'TTA': 'L', 'TTC': 'F', 'TTG': 'L', 'TTT': 'F'
}

def translate(long_ORFs):
    aa_list = list()
    for orf in long_ORFs:
        seq = ''
        args = [iter(orf)] * 3
        for chunk in zip_longest(*args, fillvalue='_'):
            codon = ''.join(chunk)
            if codon in aa_dict:
                seq += aa_dict[codon]
        if seq:
            aa_list.append(seq)
    return aa_list

print(translate(['ATGAGAGAG', 'AGAGAAGTCT', 'ACACTAGAGAGAGA']))

输出:

['MRE', 'REV', 'TLER']

上述translate()函数使用zip_longest()来将long_ORFs中的每个ORF分块为3个字符元组,每个元组连接到名为codon的字符串中,由aa_dict字典翻译并连接到seq字符串以产生序列。即使开放阅读框的长度不能被3整除。如果你想翻译只翻译长度为3的那些,你应该在第一个for循环的开头加上一个检查。
aa_dict被放在函数之外,因为它是静态的,不需要在每次函数运行时都被定义(您可以将它作为参数传递给函数,以使函数无状态)。

yfjy0ee7

yfjy0ee73#

看起来,您不想像现在这样处理long_ORFs的内容,而是想遍历long_ORFs,并单独处理列表中的每一项,所以我认为您需要类似下面的代码:

long_ORFs = ['ATGAGAGAG', 'AGAGAAGTCT', 'ACACTAGAGAGAGA']

def translate(long_ORFs):
    aa_dict = {
        'AAA': 'K', 'AAC': 'N', 'AAG': 'K', 'AAT': 'N', 'ACA': 'T', 'ACC': 'T',
        'ACG': 'T', 'ACT': 'T', 'AGA': 'R', 'AGC': 'S', 'AGG': 'R', 'AGT': 'S',
        'ATA': 'I', 'ATC': 'I', 'ATG': 'M', 'ATT': 'I', 'CAA': 'Q', 'CAC': 'H',
        'CAG': 'Q', 'CAT': 'H', 'CCA': 'P', 'CCC': 'P', 'CCG': 'P', 'CCT': 'P',
        'CGA': 'R', 'CGC': 'R', 'CGG': 'R', 'CGT': 'R', 'CTA': 'L', 'CTC': 'L',
        'CTG': 'L', 'CTT': 'L', 'GAA': 'E', 'GAC': 'D', 'GAG': 'E', 'GAT': 'D',
        'GCA': 'A', 'GCC': 'A', 'GCG': 'A', 'GCT': 'A', 'GGA': 'G', 'GGC': 'G',
        'GGG': 'G', 'GGT': 'G', 'GTA': 'V', 'GTC': 'V', 'GTG': 'V', 'GTT': 'V',
        'TAA': '*', 'TAC': 'Y', 'TAG': '*', 'TAT': 'Y', 'TCA': 'S', 'TCC': 'S',
        'TCG': 'S', 'TCT': 'S', 'TGA': '*', 'TGC': 'C', 'TGG': 'W', 'TGT': 'C',
        'TTA': 'L', 'TTC': 'F', 'TTG': 'L', 'TTT': 'F'
    }
    aaList = []  # an empty list

    for orf in long_ORFs:
        if len(orf) % 3 == 0:
            buf = ''
            for i in range(0, len(orf), 3):
                codon = orf[i: i + 3]
                buf += aa_dict[codon]
            aaList.append(buf)
    return aaList

print(translate(long_ORFs))

结果:

['MRE']

结果列表中只有一个条目,因为long_ORFs中的三个输入序列中只有一个的长度是3的偶数倍,因为您要测试这个,所以您只处理并将这一个条目添加到最终输出中,如果您将该约束移到内部循环中,并忽略不属于一组3个字符的额外字符,如下所示:

for orf in long_ORFs:
    buf = ''
    for i in range(0, len(orf), 3):
        codon = orf[i: i + 3]
        if len(codon) == 3:
            buf += aa_dict[codon]
    aaList.append(buf)

然后你会得到结果:

['MRE', 'REV', 'TLER']

相关问题