Rav*_*ven 1 python string split
我有一个字符串,我想在特定位置将其拆分为字符串列表。分割点存储在单独的分割列表中。例如:
test_string = "thequickbrownfoxjumpsoverthelazydog"
split_points = [0, 3, 8, 13, 16, 21, 25, 28, 32]
Run Code Online (Sandbox Code Playgroud)
...应该返回:
>>> ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经把这个作为解决方案,但对于任务的简单性来说,它看起来非常复杂:
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)]]
Run Code Online (Sandbox Code Playgroud)
有什么好的字符串函数可以完成这项工作,还是这是最简单的方法?
提前致谢!
像这样?
>>> map(lambda x: test_string[slice(*x)], zip(split_points, split_points[1:]+[None]))
['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
Run Code Online (Sandbox Code Playgroud)
我们zipINGsplit_points与转向自我,创造所有连续对切片索引列表,像[(0,3), (3,8), ...]。我们需要(32,None)手动添加最后一个切片,因为zip当最短序列用完时终止。
然后我们map在该列表上列出一个简单的 lambda 切片器。请注意slice(*x)which 创建了一个slice对象,例如slice(0, 3, None),我们可以使用它来使用标准项 getter(__getslice__在 Python 2 中)对序列(字符串)进行切片。
多一点 Pythonic 实现可以使用列表理解而不是map+ 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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3731 次 |
| 最近记录: |