我想遍历一个整数列表,计算属于公差为 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)
希望有人能帮助我,让我在编码之旅中变得更加明智。谢谢。
@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)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |