如何将含连续重复整数的列表转换为(整数,连续出现次数)元组列表
解决连续整数计数问题
原代码的问题
你的代码存在三个核心问题:
- 计数初始值错误:
found从0开始,但每个元素本身至少出现1次,导致最终计数少1 - 遗漏最后一组元素:循环通过
zip(diff, diff[1:])遍历,只处理到倒数第二个元素,最后一组连续元素不会被添加到结果 - 计数逻辑偏差:当遇到不同元素时,直接将
found作为次数,但found是累加的相等次数,实际次数应该是found + 1
修正后的代码
diff = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -64, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1] if not diff: # 处理空列表的边界情况 print([]) else: result = [] current_num = diff[0] count = 1 for num in diff[1:]: if num == current_num: count += 1 else: result.append((current_num, count)) current_num = num count = 1 # 添加最后一组元素 result.append((current_num, count)) print(result)
代码说明
- 先判断列表是否为空,避免索引错误
- 初始化
current_num为第一个元素,count从1开始(因为第一个元素已经出现1次) - 从第二个元素开始遍历:
- 若与当前元素相等,计数加1
- 若不等,将当前元素和计数存入结果,更新当前元素并重置计数
- 遍历结束后,必须手动添加最后一组连续元素,因为循环不会触发最后一组的结束判断
运行后输出结果:[(1, 10), (7, 12), (-64, 1), (9, 9), (1, 3)],完全符合需求。
内容的提问来源于stack exchange,提问作者Dimsey
相关产品推荐
相关产品推荐

