Python求每行平均值后取最大值问题(禁用第三方库)
问题
我是Python新手,已经实现了CSV文件中每行第6至10列(共5个数值)的平均值计算并验证结果,但尝试用max()获取最大平均值时出现“Float is not iterable”错误,且不允许使用Pandas等第三方库。现有代码如下:
def no_avg(in_file): with open(in_file, newline='', encoding='utf-16') as file: data = csv.reader(file, skipinitialspace=True, delimiter='|') next(data, None) rows = [row for row in data] for row in rows: num_avg = ((float(row[6]) + float(row[7]) + float(row[8]) + float(row[9]) + float(row[10])) / 5) print(row[0],num_avg)
希望得到解决该错误并获取最大平均值的方法。
解决方法
错误原因
出现“Float is not iterable”错误,是因为你直接把单个浮点数平均值传给了max()——max()需要接收可迭代对象(比如列表、生成器),不能直接传入单个数值。
实现步骤
- 收集所有平均值:在循环计算过程中,把每个平均值(或包含行标识与平均值的元组)存入列表;
- 调用
max()取最大值:将存储平均值的列表传给max(),若需要关联行信息,可存储(平均值, 行标识)格式的元组后再取最大值。
修改后的代码
方式1:仅获取最大平均值
import csv def no_avg(in_file): with open(in_file, newline='', encoding='utf-16') as file: data = csv.reader(file, skipinitialspace=True, delimiter='|') next(data, None) # 跳过表头 averages = [] for row in data: # 批量提取第6-10列(索引6到10)并转成浮点数 nums = [float(row[i]) for i in range(6, 11)] num_avg = sum(nums) / 5 averages.append(num_avg) print(row[0], num_avg) # 计算并输出最大平均值 if averages: max_avg = max(averages) print(f"\n最大平均值: {max_avg}") else: print("无数据可计算")
方式2:获取最大平均值及对应行标识
import csv def no_avg(in_file): with open(in_file, newline='', encoding='utf-16') as file: data = csv.reader(file, skipinitialspace=True, delimiter='|') next(data, None) # 跳过表头 avg_with_row = [] for row in data: nums = [float(row[i]) for i in range(6, 11)] num_avg = sum(nums) / 5 avg_with_row.append( (num_avg, row[0]) ) print(row[0], num_avg) # 输出最大平均值及对应行 if avg_with_row: max_item = max(avg_with_row) print(f"\n最大平均值: {max_item[0]},对应行标识: {max_item[1]}") else: print("无数据可计算")
补充说明
- 用
range(6,11)代替手动写索引,代码更简洁易维护; - 使用
sum()计算总和比逐个相加更高效; - 增加空数据判断,避免空列表调用
max()触发新错误。
内容的提问来源于stack exchange,提问作者P0ffee
相关产品推荐
相关产品推荐

