请求编写RNA序列转单字母氨基酸序列的Python代码
将RNA序列转换为单字母氨基酸序列
嘿,我来帮你搞定这个RNA转单字母氨基酸的需求!结合你给出的两个字典,我们可以很轻松地实现这个功能,下面是完整的思路和代码:
实现思路
- 校验输入合法性:RNA密码子是3个核苷酸一组,所以首先要确保输入序列的长度是3的倍数,避免分割出错。
- 拆分密码子:把输入的RNA序列按每3个字符为一组,拆成密码子列表。
- 两步映射转换:先通过
RNA_codon_table把密码子转成三字母氨基酸缩写,再用singleletter字典把三字母缩写转成单字母。 - 拼接结果:把所有单字母氨基酸拼接成最终的序列字符串,同时处理终止密码子(转为
*)。
完整代码实现
# 你提供的密码子表和单字母映射字典 RNA_codon_table = { # U 'UUU': 'Phe', 'UCU': 'Ser', 'UAU': 'Tyr', 'UGU': 'Cys', # UxU 'UUC': 'Phe', 'UCC': 'Ser', 'UAC': 'Tyr', 'UGC': 'Cys', # UxC 'UUA': 'Leu', 'UCA': 'Ser', 'UAA': '---', 'UGA': '---', # UxA 'UUG': 'Leu', 'UCG': 'Ser', 'UAG': '---', 'UGG': 'Trp', # UxG # C 'CUU': 'Leu', 'CCU': 'Pro', 'CAU': 'His', 'CGU': 'Arg', # CxU 'CUC': 'Leu', 'CCC': 'Pro', 'CAC': 'His', 'CGC': 'Arg', # CxC 'CUA': 'Leu', 'CCA': 'Pro', 'CAA': 'Gln', 'CGA': 'Arg', # CxA 'CUG': 'Leu', 'CCG': 'Pro', 'CAG': 'Gln', 'CGG': 'Arg', # CxG # A 'AUU': 'Ile', 'ACU': 'Thr', 'AAU': 'Asn', 'AGU': 'Ser', # AxU 'AUC': 'Ile', 'ACC': 'Thr', 'AAC': 'Asn', 'AGC': 'Ser', # AxC 'AUA': 'Ile', 'ACA': 'Thr', 'AAA': 'Lys', 'AGA': 'Arg', # AxA 'AUG': 'Met', 'ACG': 'Thr', 'AAG': 'Lys', 'AGG': 'Arg', # AxG # G 'GUU': 'Val', 'GCU': 'Ala', 'GAU': 'Asp', 'GGU': 'Gly', # GxU 'GUC': 'Val', 'GCC': 'Ala', 'GAC': 'Asp', 'GGC': 'Gly', # GxC 'GUA': 'Val', 'GCA': 'Ala', 'GAA': 'Glu', 'GGA': 'Gly', # GxA 'GUG': 'Val', 'GCG': 'Ala', 'GAG': 'Glu', 'GGG': 'Gly' # GxG } singleletter = {'Cys': 'C', 'Asp': 'D', 'Ser': 'S', 'Gln': 'Q', 'Lys': 'K', 'Trp': 'W', 'Asn': 'N', 'Pro': 'P', 'Thr': 'T', 'Phe': 'F', 'Ala': 'A', 'Gly': 'G', 'Ile': 'I', 'Leu': 'L', 'His': 'H', 'Arg': 'R', 'Met': 'M', 'Val': 'V', 'Glu': 'E', 'Tyr': 'Y', '---': '*'} def rna_to_single_amino(rna_sequence): # 先检查输入长度是否符合要求 if len(rna_sequence) % 3 != 0: raise ValueError("输入的RNA序列长度必须是3的倍数哦,每个密码子对应3个核苷酸!") # 把RNA序列拆分成一个个密码子 codons = [rna_sequence[i:i+3] for i in range(0, len(rna_sequence), 3)] amino_list = [] for codon in codons: # 先查密码子对应的三字母氨基酸 three_letter = RNA_codon_table.get(codon) if not three_letter: raise ValueError(f"遇到未知密码子:{codon},无法转换!") # 再转成单字母 single_letter = singleletter[three_letter] amino_list.append(single_letter) # 拼接成最终的单字母序列 return ''.join(amino_list) # 测试一下功能 if __name__ == "__main__": test_rna = "AUGUUUUCUUAUUGGUAA" result = rna_to_single_amino(test_rna) print(f"输入RNA序列:{test_rna}") print(f"转换后的单字母氨基酸序列:{result}") # 输出应该是 MFSYW*
额外优化提示
- 支持小写输入:如果你的输入可能包含小写字母,可以在函数开头加一句
rna_sequence = rna_sequence.upper(),统一转换成大写后再处理。 - 终止密码子提前停止:如果需要遇到第一个终止密码子就停止翻译,可以修改循环部分:
for codon in codons: three_letter = RNA_codon_table.get(codon) if not three_letter: raise ValueError(f"遇到未知密码子:{codon},无法转换!") single_letter = singleletter[three_letter] amino_list.append(single_letter) # 遇到终止密码子就跳出循环 if single_letter == '*': break
内容的提问来源于stack exchange,提问作者P. Di Maso
相关产品推荐
相关产品推荐

