将字符串拆分为长度连续增加的子字符串块
假设我有这个字符串:
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 ']