You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含连续重复整数的列表转换为(整数,连续出现次数)元组列表

解决连续整数计数问题

原代码的问题

你的代码存在三个核心问题:

  • 计数初始值错误: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)

代码说明

  1. 先判断列表是否为空,避免索引错误
  2. 初始化current_num为第一个元素,count从1开始(因为第一个元素已经出现1次)
  3. 从第二个元素开始遍历:
    • 若与当前元素相等,计数加1
    • 若不等,将当前元素和计数存入结果,更新当前元素并重置计数
  4. 遍历结束后,必须手动添加最后一组连续元素,因为循环不会触发最后一组的结束判断

运行后输出结果:
[(1, 10), (7, 12), (-64, 1), (9, 9), (1, 3)],完全符合需求。


内容的提问来源于stack exchange,提问作者Dimsey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:52