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

标签 python split generator

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

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)))

关于python - 根据字符串拆分迭代并进行相同长度的拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840406/

相关文章:

python - Keras - 数据集的数据生成器太大而无法放入内存

python - 'yield all the output from a generator' 有简写吗?

python - 通过 Thrift 返回 Python 字典时如何处理 "Null"值?

python - 每秒运行 Python 函数一分钟

python - 自动登录脚本需要使用存储在txt文件中的多个帐户登录

c# - 读取文本文件并写入列表

c# - 使用修剪的空格 C# 拆分字符串

python - 在 Python 的 For 循环中迭代生成器

python - 使用 Networkx 计算图中的边时出现内存错误

python - 计算模型语法中 City 对象的实例数