<p>您可以使用collections模块中的Counter类:</p>
<p>为了排除你不想要的组合,我建议根本不要把它们放在密码子字典里。我还颠倒了你的字典,以减少重复的次数,使它更易于维护</p>
<p>设置:</p>
<pre><code>acids = { 'Alanin': ['GCA', 'GCC', 'GCG', 'GCU'],
'Arginin': ['AGA', 'AGG', 'CGA', 'CGC', 'CGG', 'CGU'],
'Asparagin': ['AAC', 'AAU'],
'Asparaginsäure':['GAC', 'GAU'],
'Cystein': ['UGC', 'UGU'],
'Glutamin': ['CAA', 'CAG'],
'Glutaminsäure': ['GAA', 'GAG'],
'Glycin': ['GGA', 'GGC', 'GGG', 'GGU'],
'Histidin': ['CAC', 'CAU'],
'Isoleucin': ['AUA', 'AUC', 'AUU'],
'Leucin': ['CUA', 'CUC', 'CUG', 'CUU', 'UUA', 'UUG'],
'Lysin': ['AAA', 'AAG'],
'Met': ['AUG'],
'Phenylalanin': ['UUC', 'UUU'],
'Prolin': ['CCA', 'CCC', 'CCG', 'CCU'],
'Serin': ['AGC', 'AGU', 'UCA', 'UCC', 'UCG', 'UCU'],
'Threonin': ['ACA', 'ACC', 'ACG', 'ACU'],
'Tryptophan': ['UGG'],
'Tyrosin': ['UAC', 'UAU'],
'Valin': ['GUA', 'GUC', 'GUG', 'GUU'] }
codons = { seq:name for name,sequences in acids.items() for seq in sequences }
</code></pre>
<p>计数:</p>
<pre><code>from collections import Counter
def translate_code(seq, init_pos=0):
return Counter( codons[seq[pos:pos + 3]]
for pos in range(init_pos, len(seq), 3)
if seq[pos:pos + 3] in codons)
</code></pre>
<p>输出:</p>
<pre><code>print(translate_code("ACAAUUGACACAUAUCGUCGAGGGUGGCCA"))
Counter({'Threonin': 2, 'Arginin': 2, 'Isoleucin': 1, 'Asparaginsäure': 1, 'Tyrosin': 1, 'Glycin': 1, 'Tryptophan': 1, 'Prolin': 1})
</code></pre>
<p><em>注意,Counter类实际上是一个字典。如果需要,您可以将其转换回普通词典</em></p>