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

Python遍历TXT表格求学生平均分及二维列表索引异常排查

问题解决与平均分计算方案

问题原因分析

你的代码里,tup是一个包含7个空列表的列表,之后执行tup[i].append(infile.readline().split(",")),这会把split得到的列表作为单个元素添加到tup[i]这个空列表里。最终tup的结构是:

[
    [['学生ID', ' 作业名称', ' 分数']],
    [['123456', ' Zany Text', ' 100 ']],
    ...
]

所以tup[1]是一个只有1个元素的列表(索引0),访问tup[1][1]自然会提示索引越界。

修正后的代码(含平均分计算)

第一步:正确读取数据到二维列表

先修正数据存储的问题,直接将split后的结果赋值给tup[i],而不是append:

# 读取文件内容并整理成二维列表
with open("scores.txt", "r") as infile:
    # 读取所有行,去掉换行符并按逗号分割
    tup = [line.strip().split(",") for line in infile]

# 验证元素引用
print(tup[1][1])  # 输出: Zany Text

用with语句可以自动关闭文件,更安全;列表推导式也更简洁。

第二步:计算每个学生的平均分

我们需要按学生ID分组,统计总分和作业数,再计算平均分:

# 存储学生的总分和作业数量,键是学生ID,值是(总分, 作业数)
student_scores = {}

# 跳过表头,从第二行开始遍历
for row in tup[1:]:
    student_id = row[0].strip()  # 去除空格
    score = int(row[2].strip())  # 转换为整数
    
    if student_id in student_scores:
        # 已有记录,累加分数和作业数
        total, count = student_scores[student_id]
        student_scores[student_id] = (total + score, count + 1)
    else:
        # 新学生,初始化记录
        student_scores[student_id] = (score, 1)

# 计算并输出平均分
print("学生平均分:")
for student_id, (total, count) in student_scores.items():
    average = total / count
    print(f"学生ID {student_id}: {average:.2f}")

运行结果

执行后会输出:

学生平均分:
学生ID 123456: 81.60
学生ID 654321: 48.00

内容的提问来源于stack exchange,提问作者Prerak Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29