2

ファイルに次の行があります。1 行の例を次に示します。

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

したがって、スタート リストの各番号に対して、フィニッシュ リストに 1 つずつあります。これは、最初のコドンが exonstarts[0] で開始し、exonends[0] で終了することを意味します。2 番目は 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 に答える