算术序列中最小数字的总和

aqu*_*urk 1 python sequence

我想遍历一个整数列表,计算属于公差为 1 的算术序列的最小数字的总和 + 不属于序列的数字:

mylist = [2,3,4,10,12,13]
Run Code Online (Sandbox Code Playgroud)

因此,从 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]
Run Code Online (Sandbox Code Playgroud)

希望有人能帮助我,让我在编码之旅中变得更加明智。谢谢。

Dan*_*Hao 5

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

尝试找到每个可能的子序列的起始数字,starts然后将它们相加即可得到答案。

L = [13,12,10,4,3,2]
L.sort()

starts = [x for x in L if x-1 not in L]
print(starts)  

result = sum(starts)   
print(result)  # 24
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其放入函数中以供将来重复使用:

def sum_lowests(L):
    '''L is a numbers sequence '''

    L.sort()
    starts = [x for x in L if x-1 not in L]
    #ans = sum(starts)       # can skip this step; just to make it clear

    return sum(starts)


if __name__ == '__main__':
    L = [13,12,10,4,3,2]
  
    A = [1, 2, 3, 5,6, 9,10,11, 16]

    print(sum_lowests(L))
    print(sum_lowests(A)) # 31
Run Code Online (Sandbox Code Playgroud)

  • @Jarvis,您提供的代码对我来说太难以理解,而对于我的小用例,我发现了一些其他建议更适合。但我很感谢你抽出时间(如果你想知道的话,我不是第一个投反对票的人) (2认同)