求替换被1包围的0序列为1的正则表达式(Python布尔列表场景)
布尔列表的特定0序列替换处理方案
实现思路
- 将输入的布尔列表转换为
0/1字符串,便于字符串操作 - 验证字符串是否包含至少一个
1,无则直接返回原列表 - 识别并仅处理唯一一段被
1前后包围的连续0序列,将其替换为同等长度的1 - 处理完成后将字符串转回布尔列表返回
代码实现
def process_bool_list(bool_list): # 布尔列表转0/1字符串 s = ''.join('1' if b else '0' for b in bool_list) # 无1的情况直接返回原列表副本 if '1' not in s: return bool_list.copy() # 匹配被1前后包围的连续0序列 import re valid_segments = list(re.finditer(r'(?<=1)0+(?=1)', s)) # 仅当存在且仅存在一段符合条件的序列时才处理 if len(valid_segments) != 1: return bool_list.copy() # 替换目标序列为同等长度的1 seg_start, seg_end = valid_segments[0].span() modified_s = s[:seg_start] + '1' * (seg_end - seg_start) + s[seg_end:] # 转回布尔列表 return [char == '1' for char in modified_s]
代码说明
- 字符串转换:通过生成器表达式快速将布尔值映射为
'1'/'0'并拼接成字符串 - 正则匹配:使用
(?<=1)0+(?=1)反向/正向断言精准匹配被1前后包裹的连续0,避免误匹配开头/结尾的0序列 - 边界处理:严格检查符合条件的序列数量,仅在唯一存在时执行替换,其余情况直接返回原列表副本(避免修改原列表)
示例验证
- 输入布尔列表:
[False, False, True, False, False, False, True, False, False]
对应字符串:"001000100"
输出布尔列表:[False, False, True, True, True, True, True, False, False](对应字符串"001111100") - 输入布尔列表:
[True, False, False]
对应字符串:"100"
输出:原列表(无符合条件的被包围0序列)
内容的提问来源于stack exchange,提问作者Alfred Elkerbout
相关产品推荐
相关产品推荐

