禁用sum函数且仅用单循环实现列表中心平均值的问题
实现符合要求的中心平均值函数
需求回顾
计算列表的中心平均值:移除列表中的一个最大值和一个最小值后,剩余元素的平均值。要求:
- 不能使用内置的
sum()函数 - 仅允许使用一个循环
修正后的完整代码
def centered_average(lst: list) -> float: """ Precondition: len(lst) >= 3 >>> centered_average([1, 1, 5, 5, 10, 8, 7]) 5.2 >>> centered_average([1, 2, 3, 4, 100]) 3.0 >>> centered_average([-10, -4, -2, -4, -2, 0]) -3.0 """ total = 0 high = lst[0] low = lst[0] for num in lst: # 手动累加总和替代sum() total += num # 更新当前最大值 if num > high: high = num # 更新当前最小值 if num < low: low = num # 计算去掉最大、最小值后的平均值 return (total - high - low) / (len(lst) - 2)
关键实现说明
变量初始化:
total初始化为0,用于手动累加所有元素的和high和low直接用列表第一个元素初始化,省去原代码中冗余的a、b中间变量
单循环完成多任务:
遍历列表时同时执行三个操作:- 将当前元素累加到
total,实现手动求和 - 对比更新当前最大值
high - 对比更新当前最小值
low
- 将当前元素累加到
结果计算:
用总和减去一个最大值和一个最小值,再除以剩余元素的数量(原列表长度减2),得到中心平均值。
原代码的问题修正点
- 移除了无逻辑的
elif语法错误 - 删掉冗余的
a、b变量,直接操作high和low - 用手动累加的
total替代sum(lst),满足禁用sum()的要求 - 简化循环内的重复赋值逻辑,让代码更简洁
内容的提问来源于stack exchange,提问作者eggroll
相关产品推荐
相关产品推荐

