求助: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
相关产品推荐
相关产品推荐

