2

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

近乎_???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

因此,对于开始列表中的每个数字,完成列表中都有一个。这意味着第一个密码子从 exonstarts[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]有一种方法可以轻松地说出这个吗?

4

3 回答 3

3

内置的zip正是您所寻找的:

>>> exonstarts = [10,50,100]
>>> exonends = [20,60,110]
>>> zip(exonstarts,exonends)
[(10, 20), (50, 60), (100, 110)]
于 2012-04-28T00:04:11.637 回答
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)]
于 2012-04-28T00:03:45.633 回答
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'
于 2012-04-28T00:17:31.880 回答