2

次のようなリストがあります。

['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']

以前は文字列でした。次のようなことを行うには、リスト上の各文字列の最初と最後の要素の位置を知る必要があります。

0-2 MAR
3-11 TFFVGGNFK
...

どうすればできますか?

4

5 に答える 5

4

を使用した Python 3 ソリューションitertools.accumulate:

>>> from itertools import accumulate
>>> a = ['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']
>>> starts = [0] + list(accumulate(map(len, a)))
>>> starts
[0, 3, 12, 17, 21, 26, 55]
>>> pairs = [(l,r-1) for l,r in zip(starts, starts[1:])]
>>> pairs
[(0, 2), (3, 11), (12, 16), (17, 20), (21, 25), (26, 54)]

Python でスライシングがどのように機能するかにより、(0,3)通常は よりも便利(0, 2)ですが、理由があると仮定します。

于 2013-05-27T15:01:51.140 に答える
2

あなたが望むように、メソッドで:

from collections import OrderedDict
lst = ['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']

def indexes(l):
    start = 0
    indexes = OrderedDict()
    for i in l:
        end = start+len(i)-1
        indexes[i] = (start, end)
        start = end+1
    return indexes

print indexes(lst)
>>> 
OrderedDict([('MAR', (0, 2)), ('TFFVGGNFK', (3, 11)), ('LNGSK', (12, 16)), ('QSIK', (17, 20)), ('EIVER', (21, 25)), ('LNTASIPENVEVVICPPATYLDYSVSLVK', (26, 54))])

-1ただし、インデックスを「オフセット」なしに変更し、メソッドに表示されるandを削除+1します。

于 2013-05-27T15:13:29.787 に答える
2
foo = ['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']

count = 0
for bar in foo:
    newcount = count + len(bar)
    print count, '-', newcount-1, bar
    count = newcount
于 2013-05-27T14:54:36.890 に答える
0

これを試して:

list = ['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']
lenlist = []
for s in list:
    lenlist.append(len(s))

これで、リストlenlistには各文字列の長さが含まれます。ここから、forループを使用して開始と終了を取得できます。

belist = [] # list containing beginning & end
for i in range(len(lenlist)):
    belist.append(0)
    for j in range(i):
        belist[i].append(lenlist[j])
    belist[i] = str(belist[i]) + '-' + str(lenlist[i])

これはうまくいくはずだと思います:)

ちなみに、先頭と末尾は で区切られます。-代わりにリストに入れるには、行belist[i] = str(belist[i]) + '-' + str(lenlist[i])をに置き換えbelist[i] = (belist[i], lenlist[i])ます。

于 2013-05-27T15:15:15.587 に答える
-1

私の理解が正しければ、リストに参加する必要があります:

text = ''.join(myList)

その後、あなたはそれをするだけですindex

pos = text.index("MAR")
value = (pos, pos + len("MAR"))
于 2013-05-27T15:00:14.283 に答える