Python中合并不同长度列表并按a/b分类统计数值出现次数的方法
Python实现分类统计数值出现次数
核心逻辑
利用Python内置的迭代配对和计数工具完成统计,不需要额外安装第三方依赖:
- 拆分原始嵌套列表,取出标签序列和对应的数值子列表集合
- 按标签配对对应的数值子列表,遍历所有数值分类计数
- 按要求格式化输出统计结果
实现代码
基于collections的简洁写法
from collections import defaultdict, Counter # 原始嵌套列表 raw_data = [['a','a','b','a','b','b','b'], [5,5,4,5], [5,1,5], [2,5], [4,5], [5], [3], [5]] # 拆分标签列表与数值子列表集合 label_list = raw_data[0] num_list_group = raw_data[1:] # 初始化统计容器 count_stat = defaultdict(Counter) # 配对标签与对应数值子列表,更新计数 for label, nums in zip(label_list, num_list_group): count_stat[label].update(nums) # 按要求格式化输出 for label, counter in count_stat.items(): output_parts = [f'{count}个"{num}"' for num, count in counter.items()] print(f'"{label}"共包含{"、".join(output_parts)};')
无额外依赖的原生字典写法
如果不想引入collections模块,可以用原生Python字典实现:
raw_data = [['a','a','b','a','b','b','b'], [5,5,4,5], [5,1,5], [2,5], [4,5], [5], [3], [5]] label_list = raw_data[0] num_list_group = raw_data[1:] # 初始化统计容器 count_stat = {'a': {}, 'b': {}} for label, nums in zip(label_list, num_list_group): for num in nums: if num in count_stat[label]: count_stat[label][num] += 1 else: count_stat[label][num] = 1 # 格式化输出 for label, stat in count_stat.items(): output_parts = [f'{count}个"{num}"' for num, count in stat.items()] print(f'"{label}"共包含{"、".join(output_parts)};')
运行结果
两种写法执行后均会输出预期结果:
"a"共包含6个"5"、2个"4"、1个"1"; "b"共包含3个"5"、1个"2"、1个"3";
内容的提问来源于stack exchange,提问作者ElTitoFranki
相关产品推荐
相关产品推荐

