<p>有很多方法可以做到这一点,最好的方法取决于你的<code>seq</code>在现实生活中有多大。其他答案给出了一些很好的方法来使用Python特性来避免显式地构建列表。在</p>
<p>不管是三个连续的一个,{cd2}都是连续的。在</p>
<p>对于你给我的例子来说,这是非常容易阅读的,但大体上保留了你开始时使用的数据结构,我假设你很熟悉。我为<code>codons</code>添加了一个截断的<code>dict</code>,这样代码就可以运行了。在</p>
<pre><code>codons = {'atg':'Methionine','tgg':'Tryptophan','ggg':'Glycine',
'ggc':'Glycine','gcc':'Alanine','ccc':'Proline'}
seq='atgggggggcccccc'
seqlen= len(seq)
aaseq=[[],[],[]]
for i in range(seqlen-2):
codon = seq[i:i+3]
aa = codons[codon]
aaseq[i%3].append(aa)
print 'aaseq1 ='
print ''.join(aaseq[0])
print 'aaseq2 ='
print ''.join(aaseq[1])
print 'aaseq3 ='
print ''.join(aaseq[2])
</code></pre>
<p>这将产生以下输出:</p>
^{pr2}$
<p>如果你想要一个更简洁的表格-试试这个:</p>
<pre><code>#Make every codon by zipping the sequence offset by one each time
codon_sequence = [''.join(z) for z in zip(seq,seq[1:],seq[2:])]
#Print every 3rd codon - starting at zero...
print 'aaseq1 = ',''.join([codons[c] for c in codon_sequence[::3]])
#...then starting at 1...
print 'aaseq2 = ',''.join([codons[c] for c in codon_sequence[1::3]])
#...you get the picture...
print 'aaseq3 = ',''.join([codons[c] for c in codon_sequence[2::3]])
</code></pre>
<p>当然,如果需要进一步处理,可以将它们分配给变量,而不是最后一步打印序列。在</p>