Python二维列表移除列最小值后计算平均值的问题排查与实现
问题与修复方案
问题说明
需要实现computeAverage函数,输入二维列表ratings和列号,计算该列移除最小值后的平均评分(对应航天飞机制造商的评分)。当前代码遍历ratings时,指定列(列号2)输出异常,预期输出为55,85,90,95,75,且未实现移除最小值后计算平均的功能。
原代码问题分析
def computeAverage(_rating, _column): average = 0 _sum = 0 for i in _rating: for j in i: if i.index(j) == _column: print(j) # 缩进错误,导致语法报错 _sum += j average = _sum / 5 return round(average, 1) shuttleTypes = ["Racer", "Everyday", "Emergency", "Heavy Duty", "Light"] shuttleMakers = ["Jupishut", "Shuttlejup", "Shuttlesrjup", "Jupnride", "Riderjup", "Shuttlejrides", "Shuttajup"] ratings = [[80,90,55,65,80,65,70],[65,45,85,80,80,80,75],[90,60,90,90,40,45,75],[75,55,95,95,65,95,90],[80,90,75,65,75,60,80]] computeAverage(ratings, 2)
原代码存在以下问题:
- 索引判断逻辑错误:使用
i.index(j)获取元素索引,该方法仅返回第一个匹配值的索引,若行内存在重复数值,会导致后续相同值被错误判定为目标列。 - 冗余嵌套循环:无需遍历每个元素,直接通过
row[_column]即可获取目标列元素,嵌套循环效率低下且易出错。 - 未实现核心需求:未移除列中的最小值,直接将总和除以5,不符合“移除最小值后计算平均”的要求。
- 语法错误:
print(j)缩进层级错误,会导致运行时语法报错。
修复后的代码
def computeAverage(_rating, _column): # 提取目标列的所有评分 column_scores = [row[_column] for row in _rating] # 获取列中的最小值 min_score = min(column_scores) # 移除一个最小值(若存在多个重复最小值,仅移除第一个) column_scores.remove(min_score) # 计算平均值并保留两位小数 average = sum(column_scores) / len(column_scores) return round(average, 2) # 数据定义 shuttleTypes = ["Racer", "Everyday", "Emergency", "Heavy Duty", "Light"] shuttleMakers = ["Jupishut", "Shuttlejup", "Shuttlesrjup", "Jupnride", "Riderjup", "Shuttlejrides", "Shuttajup"] ratings = [[80,90,55,65,80,65,70],[65,45,85,80,80,80,75],[90,60,90,90,40,45,75],[75,55,95,95,65,95,90],[80,90,75,65,75,60,80]] # 输出所有制造商的平均评分 print("Shuttle Maker Average Rating") for idx, maker in enumerate(shuttleMakers): avg_rating = computeAverage(ratings, idx) print(f"{maker} {avg_rating:.2f}")
运行结果
Shuttle Maker Average Rating Jupishut 81.25 Shuttlejup 73.75 Shuttlesrjup 86.25 Jupnride 82.50 Riderjup 75.00 Shuttlejrides 75.00 Shuttajup 80.00
内容的提问来源于stack exchange,提问作者Divyam
相关产品推荐
相关产品推荐

