Python统计列表相邻重复元素时最后一个元素统计错误如何解决
列表相邻重复元素统计问题修复
需求说明
实现列表相邻重复元素的统计功能,将元素和连续出现次数依次存入结果列表。
示例输入输出
input = ["a", "a", "a", "c", "b", "b", "c"] # 预期输出 ['a', '3', 'c', '1', 'b', '2', 'c', '1']
现有代码问题
原代码
lst = ["a", "a", "a", "c", "b", "b", "c"] result = [] index = 0 while(index < len(lst)-1): count = 1 result.append(lst[index]) while(lst[index] == lst[index+1]): count += 1 index += 1 result.append(str(count)) index += 1 print("step: ", result) print("result: ", result)
实际输出
step: ['a', '3'] step: ['a', '3', 'c', '1'] step: ['a', '3', 'c', '1', 'b', '2'] result: ['a', '3', 'c', '1', 'b', '2']
问题原因
外层循环判断条件为index < len(lst)-1,当索引移动到最后一个元素位置(值为len(lst)-1)时,会直接跳出循环,导致最后一个元素未被统计。
修复后的代码
lst = ["a", "a", "a", "c", "b", "b", "c"] # 第二个测试输入可直接替换下方lst变量 # lst = ['East', 'East', 'East', 'East', 'East', 'West', 'West', 'West', 'West', 'North', 'South', 'West', 'West', 'West', 'North', 'South', 'West', 'West', 'West', 'North', 'North', 'West', 'West', 'West', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'East', 'South', 'South', 'East', 'East', 'East', 'North', 'North', 'East', 'East', 'South', 'South', 'South', 'South', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West', 'West'] result = [] index = 0 n = len(lst) while index < n: count = 1 result.append(lst[index]) # 内层比较前先判断下一个索引是否越界 while index + 1 < n and lst[index] == lst[index+1]: count += 1 index += 1 result.append(str(count)) index += 1 print("step: ", result) print("result: ", result)
修复验证
针对第一个测试输入,运行后输出如下,符合预期:
step: ['a', '3'] step: ['a', '3', 'c', '1'] step: ['a', '3', 'c', '1', 'b', '2'] step: ['a', '3', 'c', '1', 'b', '2', 'c', '1'] result: ['a', '3', 'c', '1', 'b', '2', 'c', '1']
修复后的代码同时支持第二个长测试输入,替换lst变量值即可直接运行验证。
内容的提问来源于stack exchange,提问作者CN_Cabbage
相关产品推荐
相关产品推荐

