在 For 循环中跳过迭代并在 Python 中重复初始化

Skip iteration in For loop and repeat initialisation in Python

假设我有 A=[2,4, 3 ,1],我想通过在每一步中跳过一个元素来计算内部元素的总和。 我尝试的是:

s=[ ]
a=0
for i in range(len(A)):
    for j in range(len(A)):
        if i==j:
            continue
        else :
            a +=A[j]
    s.append(a)

当我打印结果时 s 我得到

print(s)

s=[8, 14, 21, 30]

我想要的是:

s=[ 8, 6, 7, 9]

在哪里

8=4+3+1 we skip A[0]
6=2+3+1 we skip A[1]
7=2+4+1 we skip A[2]
9=2+4+3 we skip A[3]

使用列表理解计算总和然后返回总和减去每一项如何?

sum_a = sum(A)
output = [sum_a - a for a in A]
print(output) # [8, 6, 7, 9]

if 语句已经跳过迭代,因此您只需重复初始化即可。您可以通过在外循环内而不是在外循环内重新初始化总和变量 (a) 来做到这一点。

A = [2, 4, 3, 1]
s = []

for i in range(len(A)):
    a = 0
    for j in range(len(A)):
        if i == j:
            continue
        else:
            a += A[j]
    s.append(a)

print(s)

输出:

[8, 6, 7, 9]

我喜欢@j1-lee 的回答,但这里有一个漂亮的单行变体:

output = [sum(A) - a for a in A]

您可以从切片构建一个新列表,排除不需要的值,然后求和

[sum(A[:i] + A[i+1:]) for i in range(len(A))]

或者,由于 sum 结果本身可以相加,因此使用 2 个切片

[sum(A[:i]) + sum(A[i+1:]) for i in range(len(A))]