如何计算一维数组中前1/3最大值的平均值?
筛选数组最高1/3元素并计算平均值的解决方案
核心思路
- 对数组降序排序,让最大元素排在最前
- 根据数组长度计算需选取的元素数量(支持非3倍数长度的场景)
- 截取排序后的前N个元素(N为计算出的数量)
- 计算这些元素的平均值
Python 实现示例
def top_third_average(arr): # 降序排序数组 sorted_arr = sorted(arr, reverse=True) # 用整数除法实现向上取整,确保不会遗漏接近1/3的元素 n = (len(arr) + 2) // 3 # 截取前n个最高值元素 top_third = sorted_arr[:n] # 计算平均值 average = sum(top_third) / len(top_third) return average # 测试示例 test_arr = [1,2,3,4,5,6,7,8,9] print(top_third_average(test_arr)) # 输出8.0
关键细节说明
- 元素数量计算:
(len(arr) + 2) // 3是Python中实现整数除法向上取整的技巧,适配不同长度的数组:- 数组长度为9时,
(9+2)//3=3,刚好取前3个元素,符合示例需求 - 数组长度为10时,
(10+2)//3=4,取前4个最大元素 - 若需向下取整,直接替换为
len(arr) // 3即可
- 数组长度为9时,
- 大规模数组优化:如果处理超大量数据,用NumPy库效率更高:
import numpy as np def top_third_average_np(arr): sorted_arr = np.sort(arr)[::-1] n = (len(arr) + 2) // 3 top_third = sorted_arr[:n] return np.mean(top_third) # 测试 test_arr = np.array([1,2,3,4,5,6,7,8,9]) print(top_third_average_np(test_arr)) # 输出8.0
内容的提问来源于stack exchange,提问作者Rebecca
相关产品推荐
相关产品推荐

