You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()需要接收可迭代对象(比如列表、生成器),不能直接传入单个数值。

实现步骤

  1. 收集所有平均值:在循环计算过程中,把每个平均值(或包含行标识与平均值的元组)存入列表;
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:15:34