Python 如何在列表中找到元素的连续序列之和?
我需要编写一个函数,给定一个整数列表L,如果该列表包含一个和为n的连续值序列,则返回True,否则返回False 假设我的列表是:L=[2,2,4,4,0,0,2,8]和n=3。 函数应该返回False,因为没有连续的值总和为3 要求:不允许使用Python的模块 我试过:Python 如何在列表中找到元素的连续序列之和?,python,list,Python,List,我需要编写一个函数,给定一个整数列表L,如果该列表包含一个和为n的连续值序列,则返回True,否则返回False 假设我的列表是:L=[2,2,4,4,0,0,2,8]和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+
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。我知道切片有一些问题需要解决,但我不知道它是什么 最简单的方法是通过每个起始点循环每个索引和每个窗口大小,从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]将是相同的。主要问题很简单:在这种情况下,范围必须为len+1,否则在边缘情况下会失败。工作守则如下:
def consecutive(L, n):
for i in range(len(L)+1):
for j in range(i+1,len(L)+1):
s=sum(L[i:j])
if s == n:
print(i,j,s,'TRUE') #DEBUG: remove when done
#return True #uncomment this to reintegrate
else: print(i,j,s) #DEBUG: remove when done
return False
L = [2,2,4,4,0,0,2,-3]
consecutive(L,3)
更好的是,在您的示例中,您没有显示负数。如果没有否定项,则可以在循环超过搜索值时跳过循环,从而提高代码的效率,n:
def consecutive(L, n):
for i in range(len(L)+1):
for j in range(i+1,len(L)+1):
s=sum(L[i:j])
if s == n:
print(i,j,s,'TRUE') #DEBUG: remove when done
#return True #uncomment
elif s > n:
print(i,j,s,'too big') #DEBUG: remove when done
break
else: print(i,j,s) #DEBUG: remove when done
return False
L = [2,2,4,4,0,0,2,1]
consecutive(L,3)
你为什么说这只是部分起作用?在我看来,你这里有一个解决办法。而且,我不清楚你的问题。您想从我们这里得到什么信息?您保证列表值有任何信息吗?特别是,是否会有负值?输出的功能只是部分正确,例如n=3,n=10。假设n=12,输出应该为False,但我的函数输出的是True。我想知道出了什么问题。前几个元素加起来是12:2+2+4+4,再加上一两个0。