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

Python统计列表连续元素频率返回元组列表,代码出错该怎么解决?

需求说明

编写函数统计列表中连续相同元素的出现频率,返回由(元素值, 连续出现次数)格式元组组成的列表。

  • 示例输入:[1, 1, 1, 3, 5, 1, 1, 3, 3]
  • 预期输出:[(1,3) , (3,1) , (5,1) , (1,2) , (3,2)]

补充说明:collections.Counter不适用这个场景,因为Counter统计的是元素在整个列表的总出现次数,无法识别连续分组的情况。

原代码问题
  1. 语法错误:函数体内代码没有正确缩进,Python对缩进敏感,直接运行会报错
  2. 循环变量冲突:for循环的迭代变量i会被自动赋值,覆盖while循环内修改的i值,导致重复遍历已经统计过的元素,输出大量重复元组
  3. 边界判断错误:while循环的j<len(l)-1条件会漏掉最后一个元素的统计,导致末尾连续元素计数错误
  4. 缺少边界处理:没有兼容输入为空列表的情况
修复后代码
def empaquetar(l):
    # 处理空列表边界
    if not l:
        return []
    lista = []
    # 初始化第一个元素的统计值
    current_val = l[0]
    count = 1
    # 从第二个元素开始遍历对比
    for val in l[1:]:
        if val == current_val:
            count += 1
        else:
            # 遇到不同元素,保存前一组的统计结果
            lista.append((current_val, count))
            current_val = val
            count = 1
    # 遍历结束后保存最后一组的统计结果
    lista.append((current_val, count))
    return lista
验证测试
test_input = [1, 1, 1, 3, 5, 1, 1, 3, 3]
print(empaquetar(test_input))
# 输出:[(1, 3), (3, 1), (5, 1), (1, 2), (3, 2)],完全符合预期

内容的提问来源于stack exchange,提问作者Ariel Marcelo Pardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:48:00