Python中如何统计列表连续正负序列并满足特定计数规则?
解决连续正负序列的重叠计数问题
看起来你卡在了连续序列的重叠计数逻辑上——原来的代码在完成一组7个元素后直接重置了计数器,导致下一组从第8个元素开始算,但规则要求从第7个元素就开始启动下一组的计数。咱们来一步步修正这个问题:
原代码的核心问题
原逻辑中,当计数器达到7时,直接将计数器重置为0,这意味着下一组是从下一个元素(第8个)重新开始计数,违背了从第7个元素开始继续计数下一组的规则。正确的做法应该是让计数器继续累加,追踪当前连续序列的长度,再判断是否到达下一组的标记点。
修正后的代码
dev = [-2,-2,-1,-2,-5,-6,-7,-5,-12,-2,-6,-54,-7,-2,3,2,5,68,68,1,5,3,9,7,-1,-1,-4,-4,-6,-7,-8,8] counts = [] plus_counter = 0 minus_counter = 0 answer_counter = 1 for each in dev: if each > 0: # 遇到正数,重置负数计数器 minus_counter = 0 plus_counter += 1 # 标记条件:连续长度≥7,且是第7、13、19...个连续元素(间隔6个,实现重叠计数) if plus_counter >= 7 and (plus_counter - 7) % 6 == 0: counts.append(answer_counter) answer_counter += 1 else: counts.append(0) elif each < 0: # 遇到负数,重置正数计数器 plus_counter = 0 minus_counter += 1 if minus_counter >= 7 and (minus_counter - 7) % 6 == 0: counts.append(answer_counter) answer_counter += 1 else: counts.append(0) else: # 处理0的情况(题目中无0,留作扩展) plus_counter = 0 minus_counter = 0 counts.append(0) print("list: ", dev) print("counter: ", counts)
修正逻辑说明
- 保留连续计数:当连续正/负数的长度达到7后,计数器不再重置,而是继续累加,这样我们能准确知道当前处于连续序列的第几个元素。
- 重叠计数规则实现:通过
(counter - 7) % 6 == 0的条件,我们会在第7个元素(首次达标)、第13个元素(7+6,下一组的第7个)、第19个元素(13+6)等位置标记新的组,完美匹配“从第7个元素开始继续计数下一组”的要求。 - 符号切换重置:遇到相反符号元素时,依然重置对应计数器,确保从下一个元素重新开始计数,符合规则2。
测试输出
运行代码后,输出会和你的期望完全一致:
list: [-2, -2, -1, -2, -5, -6, -7, -5, -12, -2, -6, -54, -7, -2, 3, 2, 5, 68, 68, 1, 5, 3, 9, 7, -1, -1, -4, -4, -6, -7, -8, 8] counter: [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]
内容的提问来源于stack exchange,提问作者Vesper




