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

求助:Advent of Code 2022 Day1分组求和并找最大值的实现方案

解决Advent of Code 2022 Day1分组求和找最大值问题

纯Python基础解法(无需额外库)

这个方法直接遍历处理,逻辑清晰,适合本题场景:

# 输入数据
data = """1000
2000
3000

4000

5000
6000

7000
8000
9000

10000"""

# 按行分割并清理空字符串
lines = [line.strip() for line in data.split('\n')]
current_group_sum = 0
all_group_sums = []

for line in lines:
    if line:
        # 非空行,累加到当前组
        current_group_sum += int(line)
    else:
        # 遇到空行,保存当前组的和并重置累加器
        all_group_sums.append(current_group_sum)
        current_group_sum = 0
# 处理最后一组(数据末尾没有空行)
all_group_sums.append(current_group_sum)

# 找出最大组和
max_total = max(all_group_sums)
print(max_total)  # 输出结果:24000

逻辑说明

  • 先把输入文本按行拆分,去掉每行的多余空格
  • 遍历每行:非空行就累加数字,空行就把当前组的和存入列表,重置累加器
  • 最后要手动添加最后一组的和(因为数据结尾没有空行触发保存)
  • 用max()直接获取所有组和的最大值

Pandas解法(适合习惯用数据框的场景)

如果一定要用DataFrame处理,可以通过标记组号实现分组求和:

import pandas as pd

data = """1000
2000
3000

4000

5000
6000

7000
8000
9000

10000"""

# 转换为DataFrame
df = pd.DataFrame({'num_str': [line.strip() for line in data.split('\n')]})
# 生成组号:每遇到一个空行,组号加1
df['group_id'] = (df['num_str'] == '').cumsum()
# 过滤空行并转换为整数类型
df = df[df['num_str'] != ''].astype({'num_str': int})
# 分组求和
group_sums = df.groupby('group_id')['num_str'].sum()
# 获取最大值
max_total = group_sums.max()
print(max_total)  # 输出结果:24000

逻辑说明

  • 用cumsum()生成组号:空行对应的布尔值是True(即1),每次遇到空行,组号就累加1,同一组的行拥有相同的组号
  • 过滤空行后,按组号分组求和,最后取最大值

内容的提问来源于stack exchange,提问作者Sophie Scott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:27:25