Python列表连续正数出现次数统计代码输出异常求助
问题排查与修复方案
首先,咱们来拆解下你的代码为什么输出不符合预期:
核心问题
你的代码存在两个关键漏洞:
- 最后一段连续正数的计数丢失:当循环遍历完
count_list后,末尾的连续1序列(也就是最后5个1)后面没有遇到0,导致count里的数值(5)永远不会被添加到new_count_list中。 - 连续非正数会重复添加无效0:比如原数据里的
-1,-2转换后是两个连续的0,每次遇到0都会把当前的count(此时为0)添加到列表,导致多出来一个不必要的0。
优化后的高效解决方案
咱们可以跳过先转换0/1列表的步骤,直接遍历原数据统计,这样代码更简洁高效,同时解决所有问题:
data = [0,4,5,2,-1,-2,5,1,5,3,5] count = 0 continuous_pos_counts = [] for num in data: if num > 0: count += 1 else: # 只有当之前有连续正数时,才把计数存入列表 if count > 0: continuous_pos_counts.append(count) count = 0 # 循环结束后,检查是否还有未存入的连续正数计数 if count > 0: continuous_pos_counts.append(count) # 可选:生成转换后的0/1列表用于验证 binary_converted = [1 if x>0 else 0 for x in data] print("转换后的0/1列表:", binary_converted) print("连续正数的次数列表:", continuous_pos_counts)
输出结果
运行后会得到符合预期的结果:
转换后的0/1列表: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1] 连续正数的次数列表: [3, 5]
原代码的快速修复(如果坚持保留0/1转换步骤)
如果你不想改动核心逻辑,只是修复原代码的问题,可以在第二个循环结束后补充添加剩余计数,同时优化遇到0时的判断逻辑:
data = [0,4,5,2,-1,-2,5,1,5,3,5] count = 0 count_list = [] new_count_list = [] for i in data: if i > 0: count_list.append(1) elif i <= 0: count_list.append(0) for number in count_list: if number == 0: # 避免连续0重复添加无效的0 if count > 0: new_count_list.append(count) count = 0 elif number == 1: count += 1 # 循环结束后添加最后一段的连续正数计数 if count > 0: new_count_list.append(count) print(count_list) print(new_count_list)
内容的提问来源于stack exchange,提问作者Jordan Muskitta
相关产品推荐
相关产品推荐

