如何高效计算Python中多个列表的均值?
高效计算多个列表均值的方法
你当前手动逐个将20个列表代入mean函数计算均值的方式效率低下,且现有代码仅将第一个列表赋值给samples,其余列表未被正确组织到容器中。以下是几种高效实现方案:
第一步:整理数据结构
先把所有20个列表统一放入一个大列表,才能实现批量处理:
def mean(data): return sum(data)/len(data) # 将所有20个列表整合进samples samples = [ [153.43, 161.45, 166.74, 167.28, 185.09], [161.44, 175.4, 166.38, 174.19, 167.24], [177.46, 176.65, 165.96, 171.52, 153.38], [183.94, 189.5, 174.21, 176.17, 187.07], [183.34, 165.49, 172.63, 158.5, 164.52], [179.93, 172.61, 156.15, 165.89, 158.5], [164.91, 174.71, 178.26, 176.74, 188.23], [188.7, 181.8, 174.1, 167.18, 166.6], [168.44, 162.14, 174.66, 173.89, 177.69], [183.84, 161.34, 165.76, 173.74, 173.39], [156.99, 173.59, 174.17, 177.2, 164.2], [166.34, 179.78, 160.13, 166.54, 169.55], [164.3, 172.07, 167.35, 184.02, 174.3], [161.53, 161.77, 171.62, 165.17, 190.27], [173.94, 170.21, 173.68, 172.77, 166.62], [165.76, 156.93, 160.18, 166.27, 169.14], [183.99, 174.7, 159.05, 161.27, 164.46], [155.29, 161.3, 164.67, 174.18, 171.12], [180.6, 177.58, 168.16, 173.81, 161.27], [191.13, 170.21, 166.62, 173.56, 171.56] ]
方案一:列表推导式(简洁高效)
遍历大列表中的每个子列表,批量计算均值:
# 使用自定义mean函数 means = [mean(sample) for sample in samples] # 或直接内嵌sum/len,省去函数调用开销 means = [sum(sample)/len(sample) for sample in samples]
方案二:map函数(函数式风格)
将mean函数映射到samples的每个元素,返回迭代器后转为列表:
means = list(map(mean, samples))
方案三:numpy(大数据量下最优)
如果列表数量或元素规模较大,numpy的向量化运算效率远高于纯Python循环:
import numpy as np # 转换为numpy数组 samples_np = np.array(samples) # 按行计算均值(axis=1表示每行) means_np = samples_np.mean(axis=1) # 如需转为Python列表 means = means_np.tolist()
效果说明
以上方法均可一次性算出所有列表的均值,无需手动逐个代入:
- 列表推导式和map函数适合常规规模数据,代码简洁易读;
- numpy适合大规模数据集,依托底层优化实现更高效率。
内容的提问来源于stack exchange,提问作者tee
相关产品推荐
相关产品推荐

