Python如何逐索引计算嵌套列表各对应位置元素的众数
错误原因
- 你直接将嵌套列表
a传入statistics.mode()触发类型错误,该函数要求传入由可哈希元素组成的一维序列,而你传入的序列元素是子列表,属于不可哈希类型,因此报错。
正确实现方法
方法1:使用statistics标准库实现
先通过zip(*a)对嵌套列表做转置,得到每一列的同索引元素集合,再对每一列单独求众数:
import statistics a = [[1,2,3], [1,3,3], [0,3,0]] result = [statistics.mode(col) for col in zip(*a)] print(result)
输出结果:
[1, 3, 3]
注意:如果某一列存在多个出现次数相同的最高频元素,
statistics.mode()在Python 3.8及以上版本会抛出异常。如果需要兼容多众数场景,可以改用statistics.multimode()取第一个众数:result = [statistics.multimode(col)[0] for col in zip(*a)]
方法2:使用collections.Counter实现
不需要依赖statistics库,用计数器取最高频元素即可:
from collections import Counter a = [[1,2,3], [1,3,3], [0,3,0]] result = [Counter(col).most_common(1)[0][0] for col in zip(*a)] print(result)
输出结果同样为[1, 3, 3]。
内容的提问来源于stack exchange,提问作者Adarsh Wase
相关产品推荐
相关产品推荐

