如何按指定长度列表对总长度匹配的字符串高效切片拆分?
按指定长度列表拆分字符串的简洁实现
基础实现(无第三方依赖)
你原有的代码冗余在于不需要维护两个计数器,直接遍历长度列表,仅需1个偏移量变量即可完成拆分:
a = [1, 3, 4] s = "01100110" offset = 0 split_result = [] for length in a: split_result.append(s[offset:offset+length]) offset += length # 输出拆分结果 for part in split_result: print(part)
运行后输出结果和需求完全一致:
0 110 0110
函数式简洁写法(基于itertools)
如果希望进一步简化代码,无需手动维护偏移量,可以用itertools.accumulate计算累加长度,直接生成切片区间:
from itertools import accumulate a = [1, 3, 4] s = "01100110" split_result = [s[start:end] for start, end in zip([0, *accumulate(a)], accumulate(a))]
逻辑说明:
accumulate(a)会返回长度列表的累加迭代器,示例中对应值为1, 4, 8,刚好是每个切片的结束位置- 起始位置列表补0后和结束位置列表一一配对,直接切片即可得到所有拆分片段
两种方案的时间复杂度均为O(n)(n为字符串总长度),和你原有实现的执行效率完全一致,仅在写法上更简洁易读。
内容的提问来源于stack exchange,提问作者user6346482
相关产品推荐
相关产品推荐

