Skip to main content
 首页 » 编程设计

python之根据字符串拆分迭代并进行相同长度的拆分

2025年05月04日45powertoolsteam

我有一个如下所示的生成器对象:

a = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"] 

使用 python,如何根据“ab”的出现将其拆分为相同长度的 block ?

我正在寻找类似的东西:

b = ["ab", "fasj", "sfk", "sfsfg"] 
c = ["ab", "gwre", " ", " "] 
d = ["ab", "werwe", "fsfj", "lke"] 

请您参考如下方法:

以下代码并不完美,但可以完成工作(如果我正确理解您的问题):

array = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"] 
 
def split(l): 
    def internal(): 
        stack = [] 
        for v in l: 
            if v == "ab": 
                if stack: 
                    yield stack 
                stack = [] 
 
            stack.append(v) 
 
        if stack: 
            yield stack 
 
    ret = list(internal()) 
    size = max(map(len, ret)) 
 
    return [x + [" "] * (size - len(x)) for x in ret]    
 
 
print(split(array)) 

这将被返回:

[ 
    ["ab", "fasj", "sfk", "sfsfg"], 
    ["ab", "gwre", " ", " "], 
    ["ab", "werwe", "fsfj", "lke"] 
] 

编辑:OP 刚刚声明到下一个 ab 的最大长度为 4。这将大大简化代码:

array = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"] 
 
def split(l): 
    stack = [] 
    for v in l: 
        if v == "ab": 
            if stack: 
                yield stack + [" "] * (4 - len(stack)) 
 
            stack = [] 
 
        stack.append(v) 
 
    if stack: 
        yield stack + [" "] * (4 - len(stack)) 
 
print(list(split(array)))