如何知道python中已经在列表中的字符串的第一个和最后一个位置?

2024-10-17 08:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个清单:

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

以前是一根弦。我需要知道列表中每个字符串的第一个和最后一个元素的位置,以便执行以下操作:

0-2 MAR
3-11 TFFVGGNFK
...

我该怎么做?你知道吗


Tags: 字符串元素列表martffvggnfklntasipenvevvicppatyldysvslvkeiverqsik
3条回答

如您所愿,在一种方法中:

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))])

但是我会将索引更改为不带“offset”,并删除您在方法中看到的-1+1。你知道吗

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

count = 0
for bar in foo:
    newcount = count + len(bar)
    print count, '-', newcount-1, bar
    count = newcount

Python 3解决方案,使用^{}

>>> 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)更有用,但我假设您有自己的理由。你知道吗

相关问题 更多 >