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

Python从文本文件计算每年平均值的代码报错求助

问题排查与解决方案

让我来帮你搞定这个年份平均值计算的需求,先拆解下你遇到的报错原因:

1. 数据解析逻辑错误

你的原始文本是一行内包含多组年份+数值对(比如1969 324.000 1970 330.190 ...),但原代码里用year, num = line.split()试图把整行拆成两个变量——这必然会触发ValueError: too many values to unpack (expected 2),因为split()后得到的是一个包含所有元素的长列表,没法直接拆成两个变量。

2. 代码不完整

你提供的In[3]片段没写完:sorted(result....)缺少排序参数,也没有后续计算平均值的逻辑,这也会导致语法或运行错误。


修正后的完整可运行代码

下面是调整后的代码,我会逐段解释逻辑:

# 初始化字典,用来存储每个年份对应的所有数值
year_values = {}

# 读取文件并解析数据
with open('filename.txt', 'r') as f:
    for line in f:
        # 把整行内容拆成单个元素的列表,比如['1969', '324.000', '1970', ...]
        all_items = line.strip().split()
        # 按步长2遍历,每次取一组年份和数值
        for idx in range(0, len(all_items), 2):
            year = int(all_items[idx])
            value = float(all_items[idx+1])
            # 将数值添加到对应年份的列表中
            if year in year_values:
                year_values[year].append(value)
            else:
                year_values[year] = [value]

# 按年份排序,计算并输出平均值
print("年份\t平均值")
for year in sorted(year_values.keys()):
    values = year_values[year]
    avg = sum(values) / len(values)
    # 格式化输出,保留3位小数
    print(f"{year}\t{avg:.3f}")

代码细节说明:

  • 数据解析:用range(0, len(all_items), 2)实现按每两个元素一组遍历,完美适配你一行多组数据的格式,避免了拆包错误。
  • 字典构建:用if year in year_values的判断逻辑替代原代码的try-except(两种方式都可行,这里更直观易懂),确保每个年份对应一个数值列表。
  • 平均值计算:先对年份进行排序,再对每个年份的数值列表求和并除以数量,最后格式化输出结果。

运行这段代码后,你会得到如下输出:

年份	平均值
1969	324.000
1970	328.013
1971	332.194

内容的提问来源于stack exchange,提问作者Hero _of_Hell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:15