如何使用Python对长列表中的所有唯一值自动计数并绘制占比饼图
Python 列表值频次统计与可视化实现
实现流程
整套逻辑完全自动适配列表内的元素结构,不需要提前硬编码匹配规则,分两步完成:
- 自动遍历列表,统计每个唯一值的出现次数
- 基于统计结果生成带占比标注的统计图表
1. 列表唯一值频次自动统计
直接使用Python标准库的collections.Counter完成计数,对数百元素量级的列表计算效率无压力:
from collections import Counter # 原始列表 test = ['abc','abc','bcd','bcd','bcd'] # 自动统计频次,输出结构等价于 {'abc': 2, 'bcd': 3} freq_result = Counter(test) # 提取绘图所需的核心字段 labels = list(freq_result.keys()) # 所有唯一值作为图表标签 values = list(freq_result.values()) # 每个标签对应的出现次数
这套统计逻辑不需要提前预知列表内的唯一值数量、具体内容,哪怕后续列表新增/修改了元素,代码不需要调整就能自动统计全部内容。
2. 绘制带占比标注的饼图
使用matplotlib实现可视化,如需安装可执行命令:pip install matplotlib
可直接运行的完整代码:
import matplotlib.pyplot as plt # 配置字体避免中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 设为正方形画布,避免饼图拉伸变形 plt.figure(figsize=(6,6)) # 绘制饼图 plt.pie( values, labels=labels, autopct='%1.0f%%', # 自动计算占比,以整数百分比形式标注在扇区上 startangle=90 # 调整饼图起始角度,优化排版 ) # 强制保持饼图为正圆形 plt.axis('equal') plt.show()
效果匹配
针对示例输入的列表,最终生成的饼图会自动拆分两个扇区,分别标注abc占比40%、bcd占比60%,完全符合预期展示效果。
其他图表扩展适配
如果需要替换为柱状图等其他统计形式,不需要修改前面的频次统计逻辑,直接将提取到的labels和values传入对应绘图函数即可,例如绘制柱状图的核心代码:
plt.bar(labels, values) plt.xlabel("值类型") plt.ylabel("出现次数") plt.show()
内容的提问来源于stack exchange,提问作者10raw
相关产品推荐
相关产品推荐

