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

Python实现列表连续3元素求和及最大和查找(多规模列表)

问题需求
  • 编写Python程序,处理包含1000个随机正整数的列表,计算所有连续3个元素的和并找出最大和
  • 程序需要适配元素量为30000、1000000的列表
  • 示例:测试列表testlist = [1,2,3,4,5,6,7,8,9,10],需计算(1,2,3)、(2,3,4)、(3,4,5)等连续三元组的和,再找出其中的最大值
我的尝试代码
for i in [1,2,3]:
    with open(f"DANE/bloki{i}.txt", "r") as file:
        lines = file.readlines()
    lines_clear = []
    for line in lines:
        lines_clear.append(int(line.strip()))
# print(lines_clear)
max_sum_of_block = 0
for start in range(len(lines_clear)):
    for end in range(start, len(lines_clear)):
        sum_of_block = sum(lines_clear[start:end])
        max_sum_of_block = max(max_sum_of_block, sum_of_block)
print(max_sum_of_block)
代码问题分析
  • 逻辑偏离需求:当前代码计算的是所有长度的连续子数组和,而非要求的连续3个元素的和
  • 性能严重不足:嵌套循环+每次调用sum()的方式时间复杂度为O(n²),处理100万级元素会直接陷入长时间等待甚至卡死
  • 文件读取错误:循环读取3个文件时,每次都会覆盖lines_clear变量,最终仅保留最后一个文件的内容
正确解决方案

基础实现(针对连续三元组)

采用滑动窗口算法,时间复杂度O(n),处理任意规模数据都高效:

def max_consecutive_triple_sum(num_list):
    if len(num_list) < 3:
        return None  # 元素数量不足3个时返回None
    
    # 初始化第一个三元组的和
    current_sum = sum(num_list[:3])
    max_sum = current_sum
    
    # 滑动窗口遍历后续元素
    for i in range(3, len(num_list)):
        # 减去窗口最左侧元素,加上新进入窗口的元素
        current_sum = current_sum - num_list[i-3] + num_list[i]
        if current_sum > max_sum:
            max_sum = current_sum
    
    return max_sum

# 测试示例
testlist = [1,2,3,4,5,6,7,8,9,10]
print(max_consecutive_triple_sum(testlist))  # 输出27,对应8+9+10的和

适配超大文件/数据量的版本

如果是从文件读取数据,避免一次性加载所有内容到内存,逐行处理:

def max_triple_sum_from_file(file_path):
    with open(file_path, 'r') as f:
        # 先读取前3个元素初始化窗口
        window = []
        for _ in range(3):
            line = f.readline()
            if not line:
                return None  # 文件行数不足3行
            window.append(int(line.strip()))
        
        max_sum = sum(window)
        current_sum = max_sum
        
        # 滑动窗口处理剩余行
        for line in f:
            num = int(line.strip())
            # 移除窗口最左元素,加入新元素
            current_sum = current_sum - window.pop(0) + num
            window.append(num)
            if current_sum > max_sum:
                max_sum = current_sum
    
    return max_sum

# 批量处理3个文件
for i in [1,2,3]:
    file_result = max_triple_sum_from_file(f"DANE/bloki{i}.txt")
    print(f"文件bloki{i}.txt的最大连续三元组和:{file_result}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:29:55