Python统计列表连续元素频率返回元组列表,代码出错该怎么解决?
需求说明
编写函数统计列表中连续相同元素的出现频率,返回由(元素值, 连续出现次数)格式元组组成的列表。
- 示例输入:
[1, 1, 1, 3, 5, 1, 1, 3, 3] - 预期输出:
[(1,3) , (3,1) , (5,1) , (1,2) , (3,2)]
补充说明:collections.Counter不适用这个场景,因为Counter统计的是元素在整个列表的总出现次数,无法识别连续分组的情况。
原代码问题
- 语法错误:函数体内代码没有正确缩进,Python对缩进敏感,直接运行会报错
- 循环变量冲突:for循环的迭代变量
i会被自动赋值,覆盖while循环内修改的i值,导致重复遍历已经统计过的元素,输出大量重复元组 - 边界判断错误:while循环的
j<len(l)-1条件会漏掉最后一个元素的统计,导致末尾连续元素计数错误 - 缺少边界处理:没有兼容输入为空列表的情况
修复后代码
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
相关产品推荐
相关产品推荐

