VS Code Python计算列表众数报错TypeError: unhashable type: 'list'如何解决
错误修复方案
错误根因
TypeError: unhashable type: 'list'触发原因是statistics.mode方法要求传入序列的元素为可哈希类型(数值、字符串、元组等),而你代码中生成的bv序列元素为列表类型,列表本身不可哈希,因此调用统计众数时触发报错。
代码问题点
你在处理mat文件读取结果时做了多余的嵌套转换:
- 从
loadmat读取的table['Y']本身为numpy二维数组,你用列表推导将其转为了嵌套列表结构,每个元素依然是子列表 bv = list(zip(con_list))这一步完全冗余,进一步把嵌套结构封装为元组套列表的格式,和你需要的一维数值序列完全不符
修复代码
直接将读取的二维数组展平为一维数值序列即可:
import numpy as np import statistics from scipy.io import loadmat filename = "YYY.mat" table = loadmat(filename) # 直接展平二维数组为一维数值列表 bv = table['Y'].flatten().tolist() # 统计逻辑可正常运行 bv_stat = [ 0, min(bv), max(bv), np.mean(bv), statistics.mode(bv), np.quantile(bv, .025), np.quantile(bv, .25), np.quantile(bv, .50), np.quantile(bv, .75), np.quantile(bv, .975) ]
补充说明
如果你的mat文件读取结果存在特殊嵌套结构,只需保证最终传入statistics.mode的序列中不存在列表、字典这类不可哈希元素即可。之前转换set、tuple无效的原因是你只修改了外层容器类型,没有处理内层的列表元素。
内容的提问来源于stack exchange,提问作者Omid Steadieseifi
相关产品推荐
相关产品推荐

