Python实现:统计数组中长度≥k的连续0序列个数
Pythonic 统计数组中连续0序列长度≥k的出现次数
需求说明
给定数组 ts 和阈值 k,统计数组中连续0序列长度≥k的出现次数,规则为:找到一个符合条件的序列后,从下一个非0元素开始继续搜索。
示例输入
ts = [1, 6, 2, 9, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 5, 2, 3] k = 4
Pythonic 解决方案
利用itertools.groupby(Python标准库工具)实现,这是处理连续相同元素分组场景的最优方式之一:
基础实现
import itertools ts = [1, 6, 2, 9, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 5, 2, 3] k = 4 count = 0 for key, group in itertools.groupby(ts): if key == 0: # 将分组迭代器转为列表,计算长度 seq_len = len(list(group)) if seq_len >= k: count += 1 print(count) # 输出:1
简化版(一行代码)
用生成器表达式进一步简化,更符合Python简洁风格:
import itertools ts = [1, 6, 2, 9, 0, 0, 0, 0, 0, 3, 6, 4, 0, 0, 5, 2, 3] k = 4 count = sum(1 for key, group in itertools.groupby(ts) if key == 0 and len(list(group)) >= k) print(count) # 输出:1
解法说明
itertools.groupby会自动将数组中连续的相同元素聚合成分组,每个分组返回(元素值, 分组迭代器)的元组。我们只需筛选出元素值为0的分组,判断其长度是否≥k,符合条件则计数加1——完全贴合需求中“处理完一个序列后从下一个非0元素继续搜索”的规则,因为分组本身就是按连续相同元素划分的,处理完0分组后,下一个分组必然从非0元素开始。
内容的提问来源于stack exchange,提问作者Sala
相关产品推荐
相关产品推荐

