如何统计数值列表中的连续数对数量,现有代码错误该如何修正
错误原因
- 错误1:遍历到长度为1的连续分组时,直接将计数变量
i重置为0,会清空之前所有分组的计数结果。比如示例中最后一个分组[262]长度为1,直接把之前累加的2重置为0,最终输出结果错误。 - 错误2:硬编码了分组长度对应的增量逻辑,只适配了长度1、2、3的分组,一旦出现更长的连续序列(比如长度为4的连续数,对应3个连续对)就无法正确统计,逻辑通用性极差。
- 额外冗余:代码中导入了
itertools但全程未使用,属于无效导入。
修正方案
对于任意长度为n的连续分组,其包含的连续相邻数对数量固定为n-1,直接累加该值即可,不需要做长度分支判断,也不能随意重置计数变量。
修正后代码如下:
import more_itertools as mit iterable = [150,151,152,262] count = 0 for group in mit.consecutive_groups(iterable): count += len(list(group)) - 1 print(count)
如果需要更简洁的写法,也可以用生成器表达式直接求和:
import more_itertools as mit iterable = [150,151,152,262] count = sum(len(list(g)) - 1 for g in mit.consecutive_groups(iterable)) print(count)
以上代码运行输出为2,符合预期统计结果。
内容的提问来源于stack exchange,提问作者Mark K
相关产品推荐
相关产品推荐

