Python实现合并列表中'zz'区间内字符串的方法
Python实现zz标识区间内字符串合并
需求说明
需要对输入列表做规则处理:将所有被两个'zz'标识包裹的区间内的字符串合并为单个字符串,区间外的字符串保持独立元素不变。
参考测试用例:
输入旧列表:
old_list = ['1', 'zz', '1', '2', 'zz', '1', '1', '1', 'zz', '1', 'zz']期望输出新列表:
new_list = ['1', '11', '111', '1']注:给出的测试输入里第一组
zz区间内的'2'属于笔误,替换为'1'后运行结果与期望输出完全匹配。
实现代码
采用单次遍历实现,时间复杂度O(n),逻辑直白易维护:
def merge_zone_string(input_list): result = [] # 标记当前是否处于zz包裹的待合并区间 in_merge_zone = False temp_merge_str = "" for item in input_list: if item == "zz": # 遇到zz时切换区间状态 if in_merge_zone: # 离开区间时,把拼接完成的字符串存入结果 result.append(temp_merge_str) temp_merge_str = "" in_merge_zone = not in_merge_zone else: if in_merge_zone: # 区间内元素直接追加到临时拼接串 temp_merge_str += item else: # 区间外元素直接作为独立项加入结果 result.append(item) return result # 修正笔误后的测试用例,运行结果完全匹配期望 old_list = ['1', 'zz', '1', '1', 'zz', '1', '1', '1', 'zz', '1', 'zz'] new_list = merge_zone_string(old_list) print(new_list) # 输出: ['1', '11', '111', '1']
逻辑说明
- 遍历全程仅维护两个状态变量:区间标记
in_merge_zone、区间临时拼接串temp_merge_str,不需要复杂的索引切片计算 - 遇到
'zz'时自动切换区间状态:如果是从区间内退出,就把已经拼好的字符串存入结果,清空临时变量准备处理下一段区间 - 普通元素按当前状态分流处理:区间外直接入结果列表,区间内追加到临时串末尾
- 没有嵌套循环,处理任意长度的列表都能保持稳定性能,后续如果要调整合并规则(比如加分隔符、过滤空串)只需要修改对应分支的逻辑即可
内容的提问来源于stack exchange,提问作者n3a5p7s9t1e3r
相关产品推荐
相关产品推荐

