如何根据索引提取子字符串

时间:2014-03-17 09:03:33

标签: python string indices

我的目标是从下面的字符串中提取涵盖每个给定索引范围的子字符串。

_string='the old school teacher is having a nice time at school'
index_list=[[0,1,2],[4,7,20]]

我的尝试:

1)>>> [[[_string[y] for y in x]for x in index_list]
[['t', 'h', 'e'], ['o', ' ', 'e']]

2)>>>[_string[x[0:]] for x in index_list]
TypeError: string indices must be integers, not list

第一次尝试只提取了与索引相对应的字符,而第二次尝试提取了TypeError

期望的输出:

['the', 'old school teach']

有关如何达到所需输出的任何建议?感谢。

4 个答案:

答案 0 :(得分:2)

_string='the old school teacher is having a nice time at school'
index_list=[[0,1,2],[4,7,20]]
print [_string[x[0]:x[-1]+1] for x in index_list]

这是你在找什么? 您只需要第一个(x [0])和最后一个(x [-1])索引。 如果你想要整个句子,也许你必须将20改为21。

答案 1 :(得分:1)

如果仅使用每个选择器的第一个和最后一个索引来分隔每个选择:

[ _string[x[0]:x[-1]] for x in index_list]

如果你的最后一个索引是包含的,你应该在1到右边界限:

[ _string[x[0]:(x[-1]+1)] for x in index_list]

答案 2 :(得分:1)

如果它只是重​​要的范围,那么你可以这样做:

>>> _string='the old school teacher is having a nice time at school'
>>> index_list=[[0,1,2],[4,7,20]]
>>> [_string[i[0]:i[-1]+1] for i in index_list]
['the', 'old school teache']

因此,您应该将索引列表更改为[[0,1,2],[4,7,21]]。如果它只是你关心的第一个也是最后一个项目,也许你可以完全摆脱中间元素。

答案 3 :(得分:1)

您可以尝试不同的方法。 首先,如果我正确理解了您的问题,您只需要列表的第一个和最后一个索引(如果它已排序)。因此,您可以尝试删除其他值:

second_index = [[x[0],x[-1]] for x in index_list]

然后你就可以产生这样的输出:

[_string[x[0]:x[1]+1] for x in second_index]