将字符串拆分为长度连续增加的子字符串块

假设我有这个字符串:

a = 'abcdefghijklmnopqrstuvwxyz'

我想将此字符串拆分为多个块,如下所示:

['a', 'bc', 'def', 'ghij', 'klmno', 'pqrstu', 'vwxyz  ']
['a', 'bc', 'def', 'ghij', 'klmno', 'pqrstu', 'vwxyz  ']

这样每个块都有不同数量的字符。例如,第一个应该有一个字符,第二个两个等等。

如果最后一个块中没有足够的字符,那么我需要添加空格以匹配长度。

到目前为止我试过这个代码:

print([a[i: i + i + 1] for i in range(len(a))])

但它输出:

['a', 'bc', 'cde', 'defg', 'efghi', 'fghijk', 'ghijklm', 'hijklmno', 'ijklmnopq', 'jklmnopqrs', 'klmnopqrstu', 'lmnopqrstuvw', 'mnopqrstuvwxy', 'nopqrstuvwxyz', 'opqrstuvwxyz', 'pqrstuvwxyz', 'qrstuvwxyz', 'rstuvwxyz', 'stuvwxyz', 'tuvwxyz', 'uvwxyz', 'vwxyz', 'wxyz', 'xyz', 'yz', 'z']

这是我想要的输出:

回答

我认为任何一个 liner 或 for 循环都不会看起来那么优雅,所以让我们使用生成器:

from itertools import islice, count

def get_increasing_chunks(s):
    it = iter(s)
    c = count(1)

    nxt, c_ = next(it), next(c)
    while nxt:
        yield nxt.ljust(c_)
        nxt, c_ = ''.join(islice(it, c_+1)), next(c)

    return out
[*get_increasing_chunks(a)]
# ['a', 'bc', 'def', 'ghij', 'klmno', 'pqrstu', 'vwxyz  ']


以上是将字符串拆分为长度连续增加的子字符串块的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>