You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写RNA序列转单字母氨基酸序列的Python代码

将RNA序列转换为单字母氨基酸序列

嘿,我来帮你搞定这个RNA转单字母氨基酸的需求!结合你给出的两个字典,我们可以很轻松地实现这个功能,下面是完整的思路和代码:

实现思路

  1. 校验输入合法性:RNA密码子是3个核苷酸一组,所以首先要确保输入序列的长度是3的倍数,避免分割出错。
  2. 拆分密码子:把输入的RNA序列按每3个字符为一组,拆成密码子列表。
  3. 两步映射转换:先通过RNA_codon_table把密码子转成三字母氨基酸缩写,再用singleletter字典把三字母缩写转成单字母。
  4. 拼接结果:把所有单字母氨基酸拼接成最终的序列字符串,同时处理终止密码子(转为*)。

完整代码实现

# 你提供的密码子表和单字母映射字典
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:27