有没有办法求和(1 到 n)并将其与总和(n+1 到列表末尾)进行比较?

Is there any way to sum (1 to n) and compare it to the sum (n+1 to end of list)?

我正在尝试做一些事情,比如将 sum1 和 sum2 比较为 sum1 > sum2 然后停止。我将 sum1 计算为从 0 索引迭代到 n 和 sum2,方法是将 n+1 迭代到最后一个索引,但我不能这样做,我正在摆脱索引错误。我试图通过设置一些条件来解决它,但它运行无限循环。如果有人可以提供帮助,我将不胜感激。以下是我写的代码。谢谢!!我正在使用 python 3.7

intList = [0 2 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 2 1 1 2 2 2 1 2 3 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 0 1 0 1 2 2 1 0 1 1 1 1 1 1 0 0 1 0 1 0]
sum1 = 0
sum2 = 0

for i in range(len(intList)):
    sum1 = sum1 + intList[i]
    print("Sum1: " , sum1)
    for n in range(len(intList)):
        sum2 = sum2 + intList[n+1]
        print("Sum2: " , sum2)
        # if n+1 < len(intList):
        #     continue
        # else:
        #     break

您可以利用 python 的内置函数

for i in range(len(intList)):
    sum1 = sum(intList[:i+1])
    sum2 = sum(intList[i+1:])
    if sum1>sum2:
      print(i)
      break

有效的解决方案:向前移动 sum1 会增加,sum2 会减少,因此您可以在 sum1 中添加数组的当前元素并从 sum2 中减去

sum1 = 0
sum2 = sum(intList)
for i in range(len(intList)):
    sum1 += intList[i]
    sum2 -= intList[i]
    if sum1>sum2:
      print(i)
      break

我猜你的逻辑有点不对劲。在第二个循环中,您总是将列表从索引 0 添加到索引 [len(intlist)]。这与您的要求相矛盾。相反,您希望 sum2 的值从索引 intlist[n] 到 intList[len(intList)]。至于超出索引,你是因为'intList[n+1]'。以下逻辑应该有效:

sum1 = 0

for i in range(len(intList)):
    sum1 = sum1 + intList[i]
    print("Sum1: " , sum1)
    sum2= 0
    for n in range(i+1,len(intList)):
        sum2 = sum2 + intList[n]
    print("Sum2: " , sum2)
    if sum2 < sum1:
        break