4

我对编程完全陌生,昨天才开始为科学目的学习 python。

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

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

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

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

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

谢谢,

4

4 回答 4

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', ' ']
于 2013-02-22T18:32:10.447 回答
1
def split_string(string, points):
    for left, right in zip(points, points[1:]):
        yield string[left:right]
于 2013-02-22T18:32:20.097 回答
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))
于 2013-02-22T18:37:55.470 回答
0

我自己对 Python 比较陌生,所以我在这里采取了一个完全初学者的方法,只是为了帮助指导那些还不熟悉 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]:]
于 2013-02-22T22:56:39.420 回答