我需要存储特定子字符串的起始和结束索引。我需要在python中实现这个功能。如何用python实现c++ vector of pairs的相应功能?
我需要存储特定子字符串的起始和结束索引。我需要在python中实现这个功能。如何用python实现c++ vector of pairs的相应功能?
input = ['str1', 'str2', 'str3']
stored_as = {'str1': {'start': 1, 'end': 2}, 'str2': {'start': 0, 'end': 2}, 'str3': {'start': 1, 'end': 1}}
这将为您提供更好的表现。 如果空间有限,则可以将其存储为以下任一格式:
stored_as = [(1,2), (0,2), (1,1)]
或者
stored_as = [[1,2], [0,2], [1,1]]
slice
对象,您可以直接使用它们来选择子字符串:In [924]: al = [slice(0,3), slice(2,5), slice(5,10)]
In [925]: astr = 'this is a long enough string'
In [926]: [astr[s] for s in al]
Out[926]: ['thi', 'is ', 'is a ']
或者使用元组列表:
In [927]: at = [(0,3), (2,5), (5,10)]
In [928]: [astr[s[0]:s[1]] for s in at]
Out[928]: ['thi', 'is ', 'is a ']
它们甚至可以被命名为元组或列表的列表。
我们甚至可以用 itemgetter
隐藏那个切片迭代:
In [933]: import operator
In [934]: f=operator.itemgetter(*al)
In [935]: f
Out[935]: operator.itemgetter(slice(0, 3, None), slice(2, 5, None), slice(5, 10, None))
In [936]: f(astr)
Out[936]: ('thi', 'is ', 'is a ')
这个切片列表也可以包含标量索引:
In [945]: al = [0, slice(5,7), slice(10,14), -1]
In [946]: operator.itemgetter(*al)(astr)
Out[946]: ('t', 'is', 'long', 'g')