通过预定索引

时间:2017-07-14 13:52:39

标签: python string split

我有一个字符串,我想在特定的地方拆分成字符串列表。拆分点存储在单独的拆分列表中。例如:

test_string = "thequickbrownfoxjumpsoverthelazydog"
split_points = [0, 3, 8, 13, 16, 21, 25, 28, 32]

......应该回复:

>>> ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']

到目前为止,我已将此作为解决方案,但对于任务的简单性,它看起来令人难以置信:

split_points.append(len(test_string))
print [test_string[start_token:end_token] for start_token, end_token in [(split_points[i], split_points[i+1]) for i in xrange(len(split_points)-1)]]

完成这项工作的任何好的字符串函数,或者这是最简单的方法吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

喜欢这个吗?

>>> map(lambda x: test_string[slice(*x)], zip(split_points, split_points[1:]+[None]))
['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']

我们zip split_points [(0,3), (3,8), ...]移位自我,创建所有连续切片索引对的列表,如(32,None)。我们需要手动添加最后一个切片zip,因为map在最短序列耗尽时终止。

然后我们slice(*x)在该列表上添加一个简单的lambda切片器。请注意创建slice对象的slice(0, 3, None),例如__getslice__我们可以使用标准item getter(Python 2中的map)对序列(字符串)进行切片。

更多Pythonic实现可以使用列表理解而不是lambda + >>> [test_string[i:j] for i,j in zip(split_points, split_points[1:] + [None])] ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']

import OpenSSL

答案 1 :(得分:1)

这可能不那么令人费解:

private List<double> dataX = new List<double>();

...

foreach(var data in dataX)
{
     Debug.WriteLine("data: " + data);
}

double maxVal = dataX.Max<double>();
Debug.WriteLine("max: " + maxVal);

答案 2 :(得分:0)

初稿:

for idx, i in enumerate(split_points):
    try:
        print(test_string[i:split_points[idx+1]])
    except IndexError:
        print(test_string[i:])