我在文件中有以下几行。以下是一行示例:
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]
有没有办法我可以轻易说出这个?
答案 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'