我正在尝试用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)
这将导致空字符串
3条答案
按热度按时间w46czmvw1#
代码:-
输出:-
这2个输出来自前2个字,没有第3个输出,因为第3个字不能被3整除
nqwrtyyt2#
输出:
上述
translate()
函数使用zip_longest()
来将long_ORFs
中的每个ORF分块为3个字符元组,每个元组连接到名为codon
的字符串中,由aa_dict
字典翻译并连接到seq
字符串以产生序列。即使开放阅读框的长度不能被3整除。如果你想翻译只翻译长度为3的那些,你应该在第一个for循环的开头加上一个检查。aa_dict
被放在函数之外,因为它是静态的,不需要在每次函数运行时都被定义(您可以将它作为参数传递给函数,以使函数无状态)。yfjy0ee73#
看起来,您不想像现在这样处理
long_ORFs
的内容,而是想遍历long_ORFs
,并单独处理列表中的每一项,所以我认为您需要类似下面的代码:结果:
结果列表中只有一个条目,因为
long_ORFs
中的三个输入序列中只有一个的长度是3的偶数倍,因为您要测试这个,所以您只处理并将这一个条目添加到最终输出中,如果您将该约束移到内部循环中,并忽略不属于一组3个字符的额外字符,如下所示:然后你会得到结果: