每隔第n个字符拆分python字符串(字符串和第n个字符在列表中)

时间:2016-02-04 22:52:28

标签: python string list split numbers

我的代码需要这样的东西: Split python string every nth character?

然而,在我的情况下; n是嵌套列表中的数字,我想要拆分的字符串也在嵌套列表中。

myList = [["'hello''my name'"],["'is Michael'"],["'and'", "'I like''apples'"]]

nList = [[7,9],[12],[5,8,8]

我想得到这样的东西:

myNewList = [["'hello'","'my name'"],["'is Michael'"],["'and'", "'I like'","'apples"]]

即我希望将字符串拆分为与nList中的数字相对应的长度。

我尝试对上面发布的链接使用类似的解决方案:

我的尝试:

myNewList = [myList[sum(nList[:i]):sum(nList[:i+1])] for i in range(len(nList))]

但它与我的情况不符。

编辑:

注意,我不想在每个引用后使用split,但是可以将其作为解决方案提供。数字有所不同,这是一个简化的场景,我用它来暗示我的XML数据处理/写入情况。

2 个答案:

答案 0 :(得分:0)

对于结构 兼容的情况,我有一个解决方案。原始问题的一部分是缺少的下标:mlList的每个元素都是一个包含字符串列表的子列表。我已经连接了最终列表并插入了 [0] 下标,现在是多余的。

这足够接近让你感动吗?如果没有,我可以添加必要的''。join 来完成这项工作,但这甚至比这还要糟糕。

我也建议您使用xml解析工具和正则表达式。这是一个很好的练习,但它并不是特别易于维护。

myList = [["'hello''my name'"], ["'is Michael'"], ["'and''I like''apples'"]]
nList = [[7, 9], [12], [5, 8, 8]]
myNewList = [[myList[phrase][0][sum(nList[phrase][:spl]):sum(nList[phrase][:spl+1])]
              for spl in range(len(nList[phrase]))]
              for phrase in range(len(myList))]

print myNewList

没关系;对我上面的尝试来说,这是一个微不足道的补充:

myList = [["'hello''my name'"], ["'is Michael'"], ["'and'", "'I like''apples'"]]
nList = [[7, 9], [12], [5, 8, 8]]
myNewList = [[''.join(myList[phrase])[sum(nList[phrase][:spl]):sum(nList[phrase][:spl+1])]
              for spl in range(len(nList[phrase]))]
              for phrase in range(len(myList))]

print myNewList

输出:

[["'hello'", "'my name'"], ["'is Michael'"], ["'and'", "'I like'", "'apples'"]]

答案 1 :(得分:0)

res = []
for word, nums in zip(myList, nList):
    row = []
    curr = 0
    for offset in nums:
        row.append(word[0][curr:curr+offset])
        curr += offset
    res.append(row)

print(res)

虽然未经测试。