Python 算术序列中最低数的总和

Python 算术序列中最低数的总和,python,sequence,Python,Sequence,我想迭代一个整数列表,计算属于算术序列的最小数的总和,其公共差为1+不属于序列的数: mylist = [2,3,4,10,12,13] 因此,根据mylist,它将是2(从2,3,4)+10(不是序列的一部分)+12(从12,13) 我已经设法做了一些事情,但我只能想出如何做,如果列表是相反的。我相信有一个更好/更清洁的解决方案可以满足我的要求: mylist = [13,12,10,4,3,2] result = mylist[-1] #if I don't do this, I don

我想迭代一个整数列表,计算属于算术序列的最小数的总和,其公共差为1+不属于序列的数:

mylist = [2,3,4,10,12,13]
因此,根据mylist,它将是2(从2,3,4)+10(不是序列的一部分)+12(从12,13)

我已经设法做了一些事情,但我只能想出如何做,如果列表是相反的。我相信有一个更好/更清洁的解决方案可以满足我的要求:

mylist = [13,12,10,4,3,2]

result = mylist[-1] #if I don't do this, I don't know how to grab the last item in the list
for i in range(len(mylist)-1):
    if mylist[i] - mylist[i+1] == 1:
        continue
    else:
        result += mylist[i]

希望有人能帮助我,让我在编写代码的过程中变得更聪明一点。谢谢。

保留一个运行的总和、一个运行的索引,并在它仍然是一个序列时进行迭代:

mylist = [2,3,4,10,12,13]
mylist=[13,12,10,4,3,2]
mylist.sort()#这样序列在列表中是连续的
cur_指数=0
cur_sum=0
而cur_索引
保留一个运行的总和、一个运行的索引,并在它仍然是一个序列时进行迭代:

mylist = [2,3,4,10,12,13]
mylist=[13,12,10,4,3,2]
mylist.sort()#这样序列在列表中是连续的
cur_指数=0
cur_sum=0
而cur_索引
@KennethRasch-之前的帖子可以。或者,您也可以这样做:

试着找出每个可能的子序列的起始数字作为
开始
,然后将它们相加得到答案

L=[13,12,10,4,3,2]
L.排序()
开始=[x代表L中的x,如果x-1不在L中]
打印(开始)
结果=总和(开始)
打印(结果)#24
或者,您可以将其放入函数中,以便将来重新使用:

def sum_lowests(L):
“L是一个数字序列”
L.排序()
开始=[x代表L中的x,如果x-1不在L中]
ans=总和(开始)
返回ans
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
L=[13,12,10,4,3,2]
A=[1,2,3,5,6,9,10,11,16]
打印(最低金额(L))
打印(总和(A))

@KennethRasch-之前的帖子可以。或者,您也可以这样做:

试着找出每个可能的子序列的起始数字作为
开始
,然后将它们相加得到答案

L=[13,12,10,4,3,2]
L.排序()
开始=[x代表L中的x,如果x-1不在L中]
打印(开始)
结果=总和(开始)
打印(结果)#24
或者,您可以将其放入函数中,以便将来重新使用:

def sum_lowests(L):
“L是一个数字序列”
L.排序()
开始=[x代表L中的x,如果x-1不在L中]
ans=总和(开始)
返回ans
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
L=[13,12,10,4,3,2]
A=[1,2,3,5,6,9,10,11,16]
打印(最低金额(L))
打印(总和(A))


您能给出示例输入和输出吗?示例IP=
mylist=[2,3,4,10,12,13]
;示例OP=2(从2,3,4)+10(不是序列的一部分)+12(从12,13)=
24
您不需要反转列表mylist[i+1]-mylist[i]==1,结果将是mylist[0]@Aditya Gupta,如果我理解正确,您的建议是我尝试的第一件事。但是我只能让它捕捉到2,4,10。@Jarvis仅仅因为存在嵌套循环并不意味着它是O(N^2):)在我的解决方案中,内部嵌套循环中的每次迭代都会带走外部嵌套循环上的一次迭代,这意味着整个过程仍然最多有N次迭代,这是O(N),因为循环体都是O(1).您能给出示例输入和输出吗?示例IP=
mylist=[2,3,4,10,12,13]
;示例OP=2(从2,3,4)+10(不是序列的一部分)+12(从12,13)=
24
您不需要反转列表mylist[i+1]-mylist[i]==1,结果将是mylist[0]@Aditya Gupta,如果我理解正确,您的建议是我尝试的第一件事。但是我只能让它捕捉到2,4,10。@Jarvis仅仅因为存在嵌套循环并不意味着它是O(N^2):)在我的解决方案中,内部嵌套循环中的每次迭代都会带走外部嵌套循环上的一次迭代,这意味着整个过程仍然最多有N次迭代,这是O(N),因为循环体都是O(1)。这给了我一个错误:
result=sum(start)
>TypeError:“int”对象不是callable@KennethRasch-你犯了什么错误?我重新运行过,它运行得很好。很有趣。您是否更改输入或修改任何内容?或者只是剪切并粘贴,然后使用相同的输入运行它?试着看看有什么不同。对不起,我现在就开始工作了:)@Jarvis您提供的代码太多了,我无法完全理解,对于我的小用例,我找到了一些其他建议,以更好地适应。但是我感谢你花时间(如果你想知道的话,我不是投反对票的人)这给了我一个错误:
result=sum(start)
>TypeError:“int”对象不是callable@KennethRasch-你犯了什么错误?我重新运行过,它运行得很好。很有趣。您是否更改输入或修改任何内容?或者只是剪切并粘贴,然后使用相同的输入运行它?试着看看有什么不同。对不起,我现在就开始工作了:)@Jarvis您提供的代码太多了,我无法完全理解,对于我的小用例,我找到了一些其他建议,以更好地适应。但是我感谢你花时间(如果你想知道的话,我不是投反对票的人)我相信你的代码给出了序列
[13,12,10,5,4,3,2,1,0,1,2,3,4,5,6,8,10]
作为55的答案,但是如果我对这个问题的理解是正确的,它应该是40