首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道已经在python列表中的字符串的第一个和最后一个位置?

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

Stack Overflow用户
提问于 2013-05-27 22:47:15
回答 5查看 84关注 0票数 2

我有一个这样的列表:

代码语言:javascript
运行
复制
['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']

这曾经是一个字符串。我需要知道列表中每个字符串的第一个和最后一个元素的位置,才能执行以下操作:

代码语言:javascript
运行
复制
0-2 MAR
3-11 TFFVGGNFK
...

我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-27 22:54:37

代码语言:javascript
运行
复制
foo = ['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']

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

Stack Overflow用户

发布于 2013-05-27 23:01:51

Python3解决方案,使用itertools.accumulate

代码语言:javascript
运行
复制
>>> 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)更有用,但我假设您有自己的理由。

票数 4
EN

Stack Overflow用户

发布于 2013-05-27 23:13:30

正如您所希望的,在一种方法中:

代码语言:javascript
运行
复制
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+1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16775623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档