python中的对向量

Posted

技术标签:

【中文标题】python中的对向量【英文标题】:Vector of pairs in python 【发布时间】:2017-06-21 03:10:50 【问题描述】:

我需要存储某些子字符串的开始和结束索引。我需要在 python 中执行此操作。 c++ 向量对的 python 等价物是什么?

【问题讨论】:

Python equivalent for C++ STL vector/list containers的可能重复 访问这里link ...查找列表和元组... 请养成先自己寻找答案的习惯...如果您正在学习新的编程,请搜索文档语言 不,我找不到与 cpp stl 向量对的 python 等效项。请阅读问题然后回答。 元组列表。一对是具有 2 个元素的元组(c++ 和 haskell 都同意这一点)。由于您不希望元素是可变的,因此元组是完美的选择。 【参考方案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]]

【讨论】:

【参考方案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')

【讨论】:

以上是关于python中的对向量的主要内容,如果未能解决你的问题,请参考以下文章

python中的一维数组行向量与列向量

为啥matlab和python中的特征向量计算不匹配?

将数据框中的每一行除以 Python 中的向量

Python检查一个值是不是大于数组/向量中的下一个值[重复]

python中的sigmoid,可以采用标量、向量或矩阵

使用python的线性支持向量机中的软边距