首页 > 解决方案 > 如何找到列表中连续元素序列的总和?

问题描述

我需要编写一个给定整数列表的函数,如果列表包含一个连续的值序列,其总和为,L则返回,否则返回。TruenFalse

假设我的列表是:L = [2,2,4,4,0,0,2,8]and n= 3。该函数应该返回False,因为没有连续的值总和为 3。

要求:不允许使用 Python 的模块

我试过:

def consecutive(L,n):
    for i in range(len(L)):
        for j in range(i+1, len(L)):
            if sum(L[i:j+1])==n:
                return True
    return False
L = [2,2,4,4,0,0,2,8]
consecutive(L,3)

这是部分工作,因为当我设置时n=12,它会返回True。我知道切片可以解决一些问题,但我不知道它是什么。

标签: pythonlist

解决方案


天真的方法是遍历每个起始潜在起点(每个索引)和每个窗口大小(从 0 到列表长度的任何数字):

def consecutive(L, n):
    for i in range(len(L)):
        for window_size in range(len(L)):
            if sum(L[i:i + window_size]) == n:
                return True
    else:
        return False

请注意,这可以很容易地改进,首先不要多次检查相同的窗口(例如,如果列表长度为 3,那么L[2:4]L[2:3]将是同一件事)。


推荐阅读