2024-10-17 08:28:14 发布
网友
我有这样一个清单:
['MAR', 'TFFVGGNFK', 'LNGSK', 'QSIK', 'EIVER', 'LNTASIPENVEVVICPPATYLDYSVSLVK']
以前是一根弦。我需要知道列表中每个字符串的第一个和最后一个元素的位置,以便执行以下操作:
0-2 MAR 3-11 TFFVGGNFK ...
我该怎么做?你知道吗
如您所愿,在一种方法中:
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。你知道吗
-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)更有用,但我假设您有自己的理由。你知道吗
(0,3)
(0, 2)
如您所愿,在一种方法中:
但是我会将索引更改为不带“offset”,并删除您在方法中看到的
-1
和+1
。你知道吗Python 3解决方案,使用^{} :
请记住,由于切片在Python中的工作方式,
(0,3)
通常比(0, 2)
更有用,但我假设您有自己的理由。你知道吗相关问题 更多 >
编程相关推荐