You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求替换被1包围的0序列为1的正则表达式(Python布尔列表场景)

布尔列表的特定0序列替换处理方案

实现思路

  1. 将输入的布尔列表转换为0/1字符串,便于字符串操作
  2. 验证字符串是否包含至少一个1,无则直接返回原列表
  3. 识别并仅处理唯一一段被1前后包围的连续0序列,将其替换为同等长度的1
  4. 处理完成后将字符串转回布尔列表返回

代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:45:42