我需要存储某些子字符串的开始和结束索引。我需要在python中执行此操作。对c ++向量的python等价是什么?
答案 0 :(得分:1)
我建议将其存储在字典中(Hashmap)
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]]
答案 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')