映射字符串

时间:2020-10-22 04:19:11

标签: python

在给定此类kay值对的字典的情况下,我需要使用字符串将RNA转换为蛋白质。开始生产蛋白质时,需要在字符串中检测到“ AUG”,结束时需要检测到“ UAA”,“ UAG”和“ UGA”以终止该过程。

例如,当访问名为codon2amino的字典中的键,值对时,translate(“ AUGUAA”)将给出'M_',而translate(“ AGAGAUGCCCUGAGGG”)将给出'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

2 个答案:

答案 0 :(得分:0)

您可以使用textwrap将RNA代码指定为密码子列表:

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

现在您可以轻松地遍历它们。

答案 1 :(得分:0)

假设每个密码子长3个字符,则可以使用以下命令从vec <- c('{"a":[1],"b":[2,3]}', '{', '') out <- lapply(vec, function(z) try(jsonlite::stream_in(textConnection(z, encoding="UTF-8")), silent=TRUE)) # Imported 1 records. Simplifying... # Imported 0 records. Simplifying... which(sapply(out, inherits, "try-error")) # [1] 2 vec[2] # [1] "{" 中检索每个密码子:

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)

但是正如@Yatin所提到的,有关输入/输出以及映射amino_acid = ''.join([codon2amino[rna_strand[i:i+3]] for i in range(0, len(rna_strand), 3)]) 的外观的更多详细信息。

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

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)]