如何实现Python列表连续3次出现0后将后续20个元素修改为指定值
需求实现代码修改方案
核心逻辑说明
- 首先生成初始的0/1序列,和原有逻辑保持一致
- 遍历初始序列时维护两个变量:
zero_streak:统计当前连续出现'0'的次数,遇到'1'就重置为0force_zero_left:记录还需要强制置为'0'的剩余元素数量,只要该值大于0,当前元素直接设为'0',同时数值减1
- 当
zero_streak累计到3时,将force_zero_left赋值为20,触发后续元素强制置0规则
测试数据适配代码
dataList = [4, 9, 10, 12, 5, 6, 15, 16, 8, 18, 20, 21, 1, 3, 5, 6, 8, 15, 13, 22, 25, 1, 3, 11, 5, 18, 24, 25, 23, 19, 14, 6, 9, 3, 20, 3, 1, 20] # 生成初始0/1序列 raw_result = [] for i in dataList: raw_result.append('0' if i > 10 else '1') # 按规则处理序列 zero_streak = 0 force_zero_left = 0 processed_result = [] for item in raw_result: # 优先判断是否需要强制置0 if force_zero_left > 0: current = '0' force_zero_left -= 1 else: current = item processed_result.append(current) # 更新连续0计数 if current == '0': zero_streak += 1 # 连续3个0触发后续20个强制置0 if zero_streak == 3: force_zero_left = 20 else: zero_streak = 0 print(processed_result)
运行上述代码输出结果与你给出的期望结果完全一致。
随机数据适配代码
import random # 生成初始随机0/1序列 raw_list = [] for i in range(0,100): n = random.randint(1,20) raw_list.append('0' if n > 10 else '1') # 规则处理逻辑 zero_streak = 0 force_zero_left = 0 result = [] for item in raw_list: if force_zero_left > 0: current = '0' force_zero_left -= 1 else: current = item result.append(current) if current == '0': zero_streak +=1 if zero_streak ==3: force_zero_left =20 else: zero_streak =0 print(result)
边界情况说明
如果触发强制置0规则时,列表剩余元素不足20个,代码会自动将剩余所有元素置为0,不会出现索引溢出问题。
内容的提问来源于stack exchange,提问作者Mr Fanta
相关产品推荐
相关产品推荐

