python:在一次运行中将长字符串拆分到不同的位置

时间:2013-02-22 18:26:49

标签: python string python-2.7 split

我是编程新手,昨天开始学习python用于科学目的。

现在,我想将一个非常长的字符串(174个字符串)分成几个较小的字符串,如下所示:

string = 'AA111-99XYZ '
split = ('AA', 11, 1, -99, 'XYZ')

现在,我唯一能想到的是使用切片语法x次,但也许有一种更优雅的方式?有没有办法使用整数列表来指示拆分的位置,例如

split_at = (2, 4, 5, 8, 11)
split = function(split_at, string)

我希望我的问题不是太傻 - 我找不到类似的例子,但也许我只是不知道我在找什么?

谢谢,

4 个答案:

答案 0 :(得分:3)

像这样:

>>> string = 'AA111-99XYZ '

>>> split_at = [2, 4, 5, 8, 11]

>>> [string[i:j] for i, j in zip([0]+split_at, split_at+[None])]

['AA', '11', '1', '-99', 'XYZ', ' ']

答案 1 :(得分:1)

def split_string(string, points):
    for left, right in zip(points, points[1:]):
        yield string[left:right]

答案 2 :(得分:0)

为了避免冗余,您可以采用ATOzTOA的优秀解决方案并将其置于lamba函数中:

st = 'AA111-99XYZ '
sa = [2, 4, 5, 8, 11]

res = lambda string,split_at:[string[i:j] for i, j in zip([0]+split_at, split_at+[None])]


print(res(st,sa))

答案 3 :(得分:0)

我自己比较陌生,我在这里采用了一个完整的初学者的方法,只是为了指导那些还不熟悉Python功能的人。

string = 'AA111-99XYZ '
split_at = [2, 4, 5, 8, 11]

for i in range(len(split_at)):
    if i == 0:
        print string[:split_at[i]]
    if i < len(split_at)-1:
        print string[split_at[i]:split_at[i+1]]
    if i == len(split_at)-1:
        print string[split_at[i]:]