You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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)

修正逻辑说明

  1. 保留连续计数:当连续正/负数的长度达到7后,计数器不再重置,而是继续累加,这样我们能准确知道当前处于连续序列的第几个元素。
  2. 重叠计数规则实现:通过(counter - 7) % 6 == 0的条件,我们会在第7个元素(首次达标)、第13个元素(7+6,下一组的第7个)、第19个元素(13+6)等位置标记新的组,完美匹配“从第7个元素开始继续计数下一组”的要求。
  3. 符号切换重置:遇到相反符号元素时,依然重置对应计数器,确保从下一个元素重新开始计数,符合规则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

火山引擎 最新活动