如何统计列表中元素的连续出现次数并输出指定格式结果?
统计列表元素连续出现次数的解决方案
需求概述
给定输入列表 ['user', 'user', 'sys', 'sys', 'user', 'user', 'sys', 'user'],需统计每个元素的连续出现次数,当元素类型变更时计数重置,最终输出格式为 [('user', 2), ('sys', 2), ('user', 2), ('sys', 1), ('user', 1)],用于分析用户与系统的操作模式。
实现方案
方法一:手动遍历统计
无需依赖额外库,通过遍历列表跟踪当前元素和计数,逻辑清晰易扩展:
def count_consecutive(items): # 处理空列表边界情况 if not items: return [] result = [] current_item = items[0] count = 1 for item in items[1:]: if item == current_item: count += 1 else: # 元素变更时存入当前统计结果 result.append((current_item, count)) current_item = item count = 1 # 添加最后一组元素的统计结果 result.append((current_item, count)) return result # 测试示例 input_list = ['user', 'user', 'sys', 'sys', 'user', 'user', 'sys', 'user'] print(count_consecutive(input_list)) # 输出:[('user', 2), ('sys', 2), ('user', 2), ('sys', 1), ('user', 1)]
方法二:使用itertools.groupby
利用Python标准库的groupby工具,按连续相同元素分组,代码简洁高效:
from itertools import groupby def count_consecutive(items): return [(key, len(list(group))) for key, group in groupby(items)] # 测试示例 input_list = ['user', 'user', 'sys', 'sys', 'user', 'user', 'sys', 'user'] print(count_consecutive(input_list)) # 输出:[('user', 2), ('sys', 2), ('user', 2), ('sys', 1), ('user', 1)]
方案说明
- 手动遍历方式适合理解底层逻辑,可灵活添加自定义统计规则;
itertools.groupby是内置高效工具,代码量少,适合快速实现需求。
内容的提问来源于stack exchange,提问作者Sanjeev Kallepalli
相关产品推荐
相关产品推荐

