Python中的一组对向量

3

我需要存储特定子字符串的起始和结束索引。我需要在python中实现这个功能。如何用python实现c++ vector of pairs的相应功能?


可能是Python等效于C++ STL vector/list容器的重复问题。 - idjaw
访问此处链接 ... 查找列表和元组...请养成先自己寻找答案的习惯...如果您正在学习一门新的编程语言,请搜索文档。 - รยקคгรђשค
不好意思,我找不到 Python 中类似于 C++ STL 中的 vector of pairs 的等效物。请仔细阅读问题后再回答。 - Buddha
一个元组列表。一对是一个有两个元素的元组(C ++和Haskell都同意这一点)。由于您不希望修改元素,因此元组是完美的选择。 - Paul Rooney
2个回答

2
我建议将其存储在一个字典(哈希表)中。
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]]

2
如果您使用 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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接