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中的对向量的主要内容,如果未能解决你的问题,请参考以下文章