字符串中的映射

2024-09-28 23:17:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用一个字符串来将RNA转换为蛋白质,并给出这样一个kay值对的字典。开始制造蛋白质需要在字符串中检测“AUG”,结束时需要检测“UAA”、“UAG”和“UGA”以停止该过程

例如,在访问名为codon2amino的字典中的键、值对时,translate(“AUGUAA”)将给出“M”,translate(“agagugagecccugagg”)将给出“MP”

    def get_mapping(csvfilename):
        mapping = read_csv(csvfilename)
        return dict(map(lambda x : (x[0],x[3]),mapping))

这是我尝试过的,但我被困在从这里走到哪里:

    def translate(rna_strand):
         codon2amino = get_mapping("codon_mapping.csv")
         start_codon = "AUG"
         start_index = rna_strand.find(start_codon)
         stop_codons = ["UAA", "UAG", "UGA"]
         acid_list=[]
         if start_codon and "UAA" not in rna_strand:
             return None
         elif start_codon and "UAG" not in rna_strand:
             return None
         elif start_codon and "UGA" not in rna_strand:
             return None
         else:
               codons = [rna_strand[i:i+3] for i in range(start_index+3, len(rna_strand), 3)]
         for codon in codons:
             if codon in stop_codons:
                  break
 
         acid_list.append(codon2amino[codon])
      amino_acid = ''.join(amino_list) + "_"
      return amino_acid

Tags: inreturnstartmappingtranslatelistrnacodon
2条回答

假设每个密码子长度为3个字符,您可以使用以下方法从rna_strand检索每个密码子:

codons = [rna_strand[i:i+3] for i in range(0, len(rna_strand), 3)]

然后,您可以使用映射将每个密码子映射到其氨基:

amino_list = [codon2amino[codon] for codon in codons]

最后,你可以将它们结合形成氨基酸:

amino_acid = ''.join(amino_list)

在一行中,它看起来像:

amino_acid = ''.join([codon2amino[rna_strand[i:i+3]] for i in range(0, len(rna_strand), 3)])

但是正如@Yatin所提到的,关于输入/输出以及映射codon2amino的更多细节

编辑: 您可以首先使用以下命令搜索起始密码子:

start_codon = "AUG"
start_idx = rna_strand.find(start_codon)

然后,将其余部分分成密码子:

codons = [rna_strand[i:i+3] for i in range(start_idx, len(rna_strand), 3)]

然后你可以迭代它们,直到找到一个末端密码子:

stop_codons = {"UAA", "UAG", "UGA"}
amino_list = []
for codon in codons:
  # We've hit a stop codon, so we halt
  if codon in stop_codons:
    break
  if codon not in codon2amino:
    print("Invalid codon found", codon)
    break
  amino_list.append(codon2amino[codon])
amino_acid = ''.join(amino_list) + "_"

您可以使用textwrap将您的RNA代码划分为密码子列表:

import textwrap
textwrap.wrap("AUGUAA", 3) # returns ["AUG", "UAA"]

现在您可以轻松地迭代它们

相关问题 更多 >