Python统计数组符号变化次数代码运行结果与预期不符问题
问题原因分析
你代码的运行结果和预期不符,核心错误是符号判定规则写反了0的分类,我们可以直接逐行复现运行过程定位问题:
- 需求明确0视为正数,但你代码里
x == 0分支却将sign赋值为-1(代表负数),直接导致首个元素0被错误判定为负,和初始的last_sign=1触发了第一次无效计数,完整运行流程如下:- 初始状态:
last_sign=1,sign_changes=0 - 遍历第一个元素0:
sign=-1,符合sign == -last_sign,计数变为1,last_sign更新为-1 - 遍历第二个元素2:
sign=1,符合sign == -last_sign,计数变为2,last_sign更新为1 - 遍历第三个元素-1:
sign=-1,符合sign == -last_sign,计数变为3,last_sign更新为-1 - 遍历第四个元素2:
sign=1,符合sign == -last_sign,计数变为4,last_sign更新为1 - 后续元素1、2都是正数,不再触发计数,最终输出4
- 初始状态:
修复方案
只需要修改0的符号赋值逻辑即可得到正确结果,修改后的代码如下:
X = [0,2,-1,2,1,2] last_sign = 1 sign_changes = 0 for x in X: if x == 0: sign = 1 # 0视为正数,赋值为1而非-1 else: sign = x / abs(x) if sign == -last_sign: sign_changes = sign_changes + 1 last_sign = sign print(sign_changes)
运行后输出结果为2,符合预期。
内容的提问来源于stack exchange,提问作者bot_der_4
相关产品推荐
相关产品推荐

