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

如何正确将平均值从低到高排序?Python代码修复求助

修复CSV文件最低三个平均值计算与排序问题

原代码问题分析

你的代码存在三个核心问题导致输出异常:

  1. 错误的排序逻辑:将平均值转成字符串后,用key=lambda x: x[1]排序,这是按字符串的第二个字符(比如"7.5"的第二个字符是".")排序,完全不符合数值排序需求。
  2. 字符串存储引发写入异常:把平均值转成字符串存入列表,后续用csv.writer.writerows写入时,会将字符串的每个字符拆分成CSV列,因此出现7,.,5这类奇怪输出。
  3. 排序逻辑偏离需求:原排序规则完全错误,无法正确筛选出数值最低的三个平均值。

修复后的代码

无需彻底重写,仅修改几个关键部分即可:

import csv
from statistics import mean  # 确保导入mean函数,原代码可能遗漏该导入

def calculate_three_worst(input_file_name, output_file_name): #Task4
    with open(input_file_name, 'r') as input_file:
        reader = csv.reader(input_file)
        data = list(reader)
    
    averages = []
    for row in data:
        name = row[0]
        grades = [float(grade) for grade in row[1:]]
        average = mean(grades)
        averages.append(average)  # 保留数值类型,不转换为字符串
    
    # 按数值升序排序,直接取前三个最低值
    sorted_averages = sorted(averages)
    bottom_three = sorted_averages[:3]

    with open(output_file_name, 'w') as output_file:
        # 逐行写入平均值,避免CSV writer拆分字符串的问题
        for avg in bottom_three:
            output_file.write(f"{avg}\n")

calculate_three_worst("C:\\Users\\Tandis\\Desktop\\hh.CSV", "C:\\Users\\Tandis\\Desktop\\tester.txt")

关键修改说明

  • 保留数值类型:averages.append(average)不再将平均值转为字符串,确保排序基于数值大小而非字符串字符。
  • 修正排序逻辑:sorted(averages)默认按数值升序排列,直接得到从小到大的平均值列表,取前三个即为最低的三个值。
  • 正确写入文件:使用普通文件的write方法逐行写入平均值,避免CSV writer拆分字符串的问题;若坚持使用CSV writer,可改为writer.writerow([avg]),将每个平均值包装为单元素列表,保证每行仅输出一个值。

验证结果

运行修改后的代码,输出文件内容将与预期完全一致:

5.0
6.066666666666666
7.5

内容的提问来源于stack exchange,提问作者Negar Seidy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:56