如何统计列表中零元素之间的非零元素个数?
实现方法
完全可以实现该统计需求,核心思路是遍历列表时追踪连续非零元素的长度,遇到零截断时记录已统计的非零段长度即可,对应实现代码如下:
def count_nonzero_segments(arr): result = [] current = 0 for num in arr: if num != 0: current += 1 else: if current: result.append(current) current = 0 # 兼容列表末尾为非零元素的场景 if current: result.append(current) return result # 测试验证 a = [1, 0, 0, 0, 5, 6, 7, 0, 0, 2, 4, 0] print(count_nonzero_segments(a))
运行上述代码,输出结果为[1, 3, 2],和预期结果完全一致。
逻辑说明
- 初始化空结果列表、连续非零计数器,计数器初始值为0
- 逐元素遍历输入列表:
- 若当前元素非零,计数器累加1
- 若当前元素为零,且计数器值大于0,说明已经统计完一段被零截断的连续非零元素,将计数器值存入结果列表后重置计数器为0;若计数器为0说明当前处于连续零区间,无操作即可
- 遍历结束后若计数器仍有值,对应列表结尾是非零元素、没有被零截断的非零段,将该值追加到结果列表即可
内容的提问来源于stack exchange,提问作者nsp077
相关产品推荐
相关产品推荐

