如何在Python中计算嵌套列表各子列表的元素平均值?报错解决
嵌套列表子列表平均值计算问题
问题背景
我有一个嵌套列表L,想要计算该列表中每个子列表的元素平均值,但运行代码时出现错误,相关信息如下:
原代码
L=[[], [1.3342713788981633], [1.3342713788981633], [0.40896852187708455,1,3]] L_avg=[(i+j)/len[i,j] for [i,j] in L] print(L_avg)
报错信息
in <listcomp> L_avg=[(i+j)/len[i,j] for [i,j] in L] ValueError: not enough values to unpack (expected 2, got 0)
预期输出
L_avg=[[], [1.3342713788981633], [1.3342713788981633], [(0.40896852187708455+1+3)/3]]
错误原因
- 强制解包不匹配:代码里
[i,j] in L要求每个子列表必须有2个元素,但实际子列表长度有0、1、3三种情况,无法完成固定长度的解包,触发ValueError。 - 长度计算语法错误:
len[i,j]是错误写法,获取列表长度应该用len(子列表),而非下标访问方式。 - 总和计算不通用:硬编码
i+j只能计算双元素列表的总和,无法适配单元素、多元素或空列表的场景。
解决代码
针对不同长度的子列表做适配,用sum()计算总和,同时处理空列表的情况:
L = [[], [1.3342713788981633], [1.3342713788981633], [0.40896852187708455, 1, 3]] L_avg = [] for sub_list in L: if not sub_list: L_avg.append([]) else: avg = sum(sub_list) / len(sub_list) L_avg.append([avg]) print(L_avg)
也可以用列表推导式简化写法:
L = [[], [1.3342713788981633], [1.3342713788981633], [0.40896852187708455, 1, 3]] L_avg = [[] if not sub else [sum(sub)/len(sub)] for sub in L] print(L_avg)
运行后输出与预期一致:
[[], [1.3342713788981633], [1.3342713788981633], [1.4696561739590282]]
内容的提问来源于stack exchange,提问作者user19862793
相关产品推荐
相关产品推荐

