遍历字符串列表返回单个字符

时间:2019-02-05 04:42:29

标签: python-3.x list dictionary

我有一个3个字母字符串的列表,这些字符串与程序中字典的键匹配。我想使用字典翻译每个3个字母的字符串,所以我写了一个for循环。它不翻译列表中的每个元素,而是翻译每个3个字母的元素中的每个单个字符,这什么都不做,因为字典中没有对。我觉得我忘了一些有关for循环和列表的基本知识,但是我不知道如何让它迭代和转换我想要的方式。下面的代码:

rnaCodonTable = {
# RNA codon table
# U
'UUU': 'F', 'UCU': 'S', 'UAU': 'Y', 'UGU': 'C',  # UxU
'UUC': 'F', 'UCC': 'S', 'UAC': 'Y', 'UGC': 'C',  # UxC
'UUA': 'L', 'UCA': 'S', 'UAA': 'STOP', 'UGA': 'STOP',  # UxA
'UUG': 'L', 'UCG': 'S', 'UAG': 'STOP', 'UGG': 'W',  # UxG
# C
'CUU': 'L', 'CCU': 'P', 'CAU': 'H', 'CGU': 'R',  # CxU
'CUC': 'L', 'CCC': 'P', 'CAC': 'H', 'CGC': 'R',  # CxC
'CUA': 'L', 'CCA': 'P', 'CAA': 'Q', 'CGA': 'R',  # CxA
'CUG': 'L', 'CCG': 'P', 'CAG': 'Q', 'CGG': 'R',  # CxG
# A
'AUU': 'I', 'ACU': 'T', 'AAU': 'N', 'AGU': 'S',  # AxU
'AUC': 'I', 'ACC': 'T', 'AAC': 'N', 'AGC': 'S',  # AxC
'AUA': 'I', 'ACA': 'T', 'AAA': 'K', 'AGA': 'R',  # AxA
'AUG': 'M', 'ACG': 'T', 'AAG': 'K', 'AGG': 'R',  # AxG
# G
'GUU': 'V', 'GCU': 'A', 'GAU': 'D', 'GGU': 'G',  # GxU
'GUC': 'V', 'GCC': 'A', 'GAC': 'D', 'GGC': 'G',  # GxC
'GUA': 'V', 'GCA': 'A', 'GAA': 'E', 'GGA': 'G',  # GxA
'GUG': 'V', 'GCG': 'A', 'GAG': 'E', 'GGG': 'G'   # GxG
}
self.aaList = []
self.codonList = ['AUG', 'AGG', 'CUG', 'AAG', 'AUA', 'AGG', 'ACA', 'GAC', 'GGC', 'GCC', 'GCC', 'CAG', 'CAA', 'CAG', 'CAG', 'GCG', 'GAC', 'UGG', 'CGG', 'GAC', 'UGC', 'UUC', 'AUC', 'CGC', 'GCC', 'GUC', 'GUC', 'GAG', 'AUG', 'CCG', 'GCG', 'GAC', 'UGG', 'GGC', 'AUG', 'GCG', 'AUA', 'AUC', 'AAG', 'GCC', 'AUG', 'CCC', 'CAG', 'GAG', 'AUG', 'GUA', 'AAC', 'GAG', 'CUG', 'UUA', 'CAA', 'AGC', 'CGA', 'AAC', 'GAC', 'CCC', 'UAC', 'UAC', 'AAA', 'UUC', 'GCG', 'CUU', 'CUG', 'CUA', 'CUG', 'CAG', 'AGG', 'GCA', 'CAG', 'AAA', 'UAA']
for codon in self.codonList[:]:
        self.aaList += codon.translate(self.rnaCodonTable)
    print (self.aaList)

我期望输出['M','R','L',...]根据字典翻译每个3个字母的字符串,但是我得到了:

['A', 'U', 'G', 'A', 'G', 'G', 'C', 'U', 'G', 'A', 'A', 'G', 'A', 'U', 'A', 'A', 'G', 'G', 'A', 'C', 'A', 'G', 'A', 'C', 'G', 'G', 'C', 'G', 'C', 'C', 'G', 'C', 'C', 'C', 'A', 'G', 'C', 'A', 'A', 'C', 'A', 'G', 'C', 'A', 'G', 'G', 'C', 'G', 'G', 'A', 'C', 'U', 'G', 'G', 'C', 'G', 'G', 'G', 'A', 'C', 'U', 'G', 'C', 'U', 'U', 'C', 'A', 'U', 'C', 'C', 'G', 'C', 'G', 'C', 'C', 'G', 'U', 'C', 'G', 'U', 'C', 'G', 'A', 'G', 'A', 'U', 'G', 'C', 'C', 'G', 'G', 'C', 'G', 'G', 'A', 'C', 'U', 'G', 'G', 'G', 'G', 'C', 'A', 'U', 'G', 'G', 'C', 'G', 'A', 'U', 'A', 'A', 'U', 'C', 'A', 'A', 'G', 'G', 'C', 'C', 'A', 'U', 'G', 'C', 'C', 'C', 'C', 'A', 'G', 'G', 'A', 'G', 'A', 'U', 'G', 'G', 'U', 'A', 'A', 'A', 'C', 'G', 'A', 'G', 'C', 'U', 'G', 'U', 'U', 'A', 'C', 'A', 'A', 'A', 'G', 'C', 'C', 'G', 'A', 'A', 'A', 'C', 'G', 'A', 'C', 'C', 'C', 'C', 'U', 'A', 'C', 'U', 'A', 'C', 'A', 'A', 'A', 'U', 'U', 'C', 'G', 'C', 'G', 'C', 'U', 'U', 'C', 'U', 'G', 'C', 'U', 'A', 'C', 'U', 'G', 'C', 'A', 'G', 'A', 'G', 'G', 'G', 'C', 'A', 'C', 'A', 'G', 'A', 'A', 'A', 'U', 'A', 'A']

我如何使翻译影响列表中的整个字符串,而不是字符串中的每个字符?

2 个答案:

答案 0 :(得分:0)

摘自string.translate上的文档:

  

从deletechars中的s中删除所有字符(如果存在),然后使用table转换字符,该表必须是256个字符的字符串,为每个字符值提供转换,并按其序号索引。如果table为None,则仅执行字符删除步骤。

...这与您正在执行的操作完全不同。这就是你应该做的:

aaList = ""
for codon in self.codonList:
    self.aaList += self.rnaCodonTable[codon]

答案 1 :(得分:0)

为简单起见,我删除了所有的self,您很接近,您的迭代是正确的,但是您需要遍历列表中的每个对象。

然后使用该对象在您定义的字典中找到相应的值。修复了打印错误的缩进。

此外,您不需要使用转换,而我使用append将值添加到结果列表中。

希望有帮助:)

rnaCodonTable = {
# RNA codon table
# U
'UUU': 'F', 'UCU': 'S', 'UAU': 'Y', 'UGU': 'C',  # UxU
'UUC': 'F', 'UCC': 'S', 'UAC': 'Y', 'UGC': 'C',  # UxC
'UUA': 'L', 'UCA': 'S', 'UAA': 'STOP', 'UGA': 'STOP',  # UxA
'UUG': 'L', 'UCG': 'S', 'UAG': 'STOP', 'UGG': 'W',  # UxG
# C
'CUU': 'L', 'CCU': 'P', 'CAU': 'H', 'CGU': 'R',  # CxU
'CUC': 'L', 'CCC': 'P', 'CAC': 'H', 'CGC': 'R',  # CxC
'CUA': 'L', 'CCA': 'P', 'CAA': 'Q', 'CGA': 'R',  # CxA
'CUG': 'L', 'CCG': 'P', 'CAG': 'Q', 'CGG': 'R',  # CxG
# A
'AUU': 'I', 'ACU': 'T', 'AAU': 'N', 'AGU': 'S',  # AxU
'AUC': 'I', 'ACC': 'T', 'AAC': 'N', 'AGC': 'S',  # AxC
'AUA': 'I', 'ACA': 'T', 'AAA': 'K', 'AGA': 'R',  # AxA
'AUG': 'M', 'ACG': 'T', 'AAG': 'K', 'AGG': 'R',  # AxG
# G
'GUU': 'V', 'GCU': 'A', 'GAU': 'D', 'GGU': 'G',  # GxU
'GUC': 'V', 'GCC': 'A', 'GAC': 'D', 'GGC': 'G',  # GxC
'GUA': 'V', 'GCA': 'A', 'GAA': 'E', 'GGA': 'G',  # GxA
'GUG': 'V', 'GCG': 'A', 'GAG': 'E', 'GGG': 'G'   # GxG
}

aaList = []
codonList = ['AUG', 'AGG', 'CUG', 'AAG', 'AUA', 'AGG', 'ACA', 'GAC', 'GGC', 'GCC', 'GCC', 'CAG', 'CAA', 'CAG', 'CAG', 'GCG', 'GAC', 'UGG', 'CGG', 'GAC', 'UGC', 'UUC', 'AUC', 'CGC', 'GCC', 'GUC', 'GUC', 'GAG', 'AUG', 'CCG', 'GCG', 'GAC', 'UGG', 'GGC', 'AUG', 'GCG', 'AUA', 'AUC', 'AAG', 'GCC', 'AUG', 'CCC', 'CAG', 'GAG', 'AUG', 'GUA', 'AAC', 'GAG', 'CUG', 'UUA', 'CAA', 'AGC', 'CGA', 'AAC', 'GAC', 'CCC', 'UAC', 'UAC', 'AAA', 'UUC', 'GCG', 'CUU', 'CUG', 'CUA', 'CUG', 'CAG', 'AGG', 'GCA', 'CAG', 'AAA', 'UAA']
for codon in codonList:
    aaList.append(rnaCodonTable[codon])
print (aaList)