在给定此类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
答案 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)]