我正在写一个程序,我想在我的for
循环中使用3个变量,并且每个变量都应该从不同的开始索引运行。这是我的代码片段。我有一个名为codons的表,其中每三个字母都有一些值,例如'atg':'F'
,'ggg':'Q'
,'ttg':'E'
等等
seq='atgggggggcccccc'
seqlen= len(seq)
aaseq1=[]
aaseq2=[]
aaseq3=[]
for i in range(0,seqlen,3):
codon1 = seq[i:i+3]
aa1 = codons[codon1]
aaseq1.append(aa1)
print ''.join(aaseq1)
在这段代码中,我从位置0运行变量i
,但我想再使用2个变量(j
和{aaseq2
和aaseq3
列表中。在
您似乎在寻找内置的
zip
函数,它允许锁步迭代。结合元组解包,其工作原理如下:zip
的参数是您通常可以在for
循环的该部分中使用的任何参数,并且可以有任意数量的参数(只要您分配给相同数量的变量,或者只分配给一个变量,该变量将在每次迭代中成为元组)。在有很多方法可以做到这一点,最好的方法取决于你的
seq
在现实生活中有多大。其他答案给出了一些很好的方法来使用Python特性来避免显式地构建列表。在不管是三个连续的一个,{cd2}都是连续的。在
对于你给我的例子来说,这是非常容易阅读的,但大体上保留了你开始时使用的数据结构,我假设你很熟悉。我为
codons
添加了一个截断的dict
,这样代码就可以运行了。在这将产生以下输出:
^{pr2}$如果你想要一个更简洁的表格-试试这个:
当然,如果需要进一步处理,可以将它们分配给变量,而不是最后一步打印序列。在
(我通常)尽量不要在Python中使用循环。虽然(正如@PM-2ring在一篇评论中指出的那样)列表表达式并不一定比显式循环快,但有些人发现,通过让python尽可能多地处理数据迭代的细节,它们可以更快地编写、理解和调试。在
下面是您的程序的几个版本,最终“pythonified”为四行,只是为了看看它去了哪里。在
通常有一些方法可以让Python为您做一些事情,使用索引和列表表达式。这些都可以是简洁而强大的东西,许多python函数只做您希望它们做的事情。例如,zip只会在末尾丢弃悬空的碱基对,而不会抱怨。在
打印语句只是为了看看发生了什么,当然稍后删除它们。在
…也可以这样写:
^{pr2}$那只是为了宣传更多的python。对于初学者来说,它的可读性可能较低。在
这是一个更进一步的pythonification(只是为了看看它的去向……):
最后,如果你想把三个AA序列变成三个长字符串:
为了好玩,下面是字典
codons
可能的样子(从Wikipedia开始,注意A,T,G,C基的大写。所以在问题seq = 'ATGGGGGGGCCCCCC'
相关问题 更多 >
编程相关推荐