如何在Python中通过枚举(Enum)计算列表元素的平均值?
解决Enum枚举成员的平均值计算问题
问题原因
statistics.mean函数无法直接处理Enum枚举成员对象,它需要数值类型(如int、float)的输入。你遇到的AttributeError就是因为枚举成员不是数值,没有numerator属性(该属性是分数/数值类型的特性)。
解决方案
要计算枚举成员的平均值,需要先提取每个枚举成员对应的value属性(也就是你定义枚举时赋予的整数),再用这些数值计算平均值。
修改后的代码
from enum import Enum import statistics class Ing(Enum): Water = 0 Sugar = 1 Apple = 2 Flour = 3 Dish1 = ["Apple Pie", Ing.Water, Ing.Sugar, Ing.Apple, Ing.Flour] Avg_All = [] # 提取菜品名称并加入结果列表 dish_name = Dish1.pop(0) Avg_All.append(dish_name) # 提取枚举成员的value值,生成数值列表 ing_values = [ing.value for ing in Dish1] # 计算平均值 avg = statistics.mean(ing_values) # 将平均值加入结果列表 Avg_All.append(avg) print(Avg_All) # 输出: ['Apple Pie', 1.5]
多菜品扩展示例
如果有多个菜品需要处理,可以用循环简化流程:
# 假设有多个菜品 dishes = [ ["Apple Pie", Ing.Water, Ing.Sugar, Ing.Apple, Ing.Flour], ["Sugar Water", Ing.Water, Ing.Sugar] ] Avg_All = [] for dish in dishes: name = dish.pop(0) values = [ing.value for ing in dish] avg = statistics.mean(values) Avg_All.extend([name, avg]) print(Avg_All) # 输出: ['Apple Pie', 1.5, 'Sugar Water', 0.5]
内容的提问来源于stack exchange,提问作者Daan Van de Wiel
相关产品推荐
相关产品推荐

