快速基本循环

时间:2012-04-27 23:59:26

标签: python loops for-loop

我在文件中有以下几行。以下是一行示例:

  

NM _ ???? chr12 - 10 110 10 110 3 10,50,100,20,60,110,

我有以下代码来获取信息:

fp = open(infile, 'r')
for line in fp:
     tokens = line.split()
     exonstarts = tokens[8][:-1].split(',')
     exonends = tokens[9][:-1].split(',')

这会给我一个这样的清单:

exonstarts = [10,50,100]
exonends = [20,60,110]

这有3个外显子(虽然文件中的其他线条可能比3个更多或更少,所以这必须适用于任何数量的外显子),它们来自:

 10-20
 50-60
 100-110

因此,对于开始列表中的每个数字,完成列表中都有一个。 这意味着第一个密码子从外显子[0]开始并以结束于 exonends [0]。第二个开始于exonstarts [1]并以exonends结束[1]。 等等。

如何编写其余代码,以便将元素配对?


更新

来自:

tokens = line.split()
exonstarts = tokens[8][:-1].split(',')
exonends = tokens[9][:-1].split(',')
zipped = list(zip(exonstarts, exonends))

我有另一个问题,我有一种刺痛,我想要这些。所以,例如,我想要chr_string[10:20]+chr_string[50:60]+chr_string[100:110]有没有办法我可以轻易说出这个?

3 个答案:

答案 0 :(得分:3)

zip内置内容正是您的目标:

>>> exonstarts = [10,50,100]
>>> exonends = [20,60,110]
>>> zip(exonstarts,exonends)
[(10, 20), (50, 60), (100, 110)]

答案 1 :(得分:2)

我相信你想要zip功能。

In [1]: exonstarts = [10,50,100]

In [2]: exonends = [20,60,110]

In [3]: zip(exonstarts, exonends)
Out[3]: [(10, 20), (50, 60), (100, 110)]

答案 2 :(得分:0)

您可以使用zip()获取这些对:

>>> for t in zip(exonstarts, exonends):
...     print('%d-%d' % t)
... 
10-20
50-60
100-110

通过使用这些对切片list(我已经伪造)获得chr_string

>>> [chr_string[start:end] for start,end in zip(exonstarts, exonends)]
['0506070809', '2526272829', '5051525354']

将这些加在一起:

>>> ''.join(chr_string[start:end] for start,end in zip(exonstarts, exonends))
'050607080925262728295051525354'
相关问题