在 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))]
假设我有 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 skipA[1]
7=2+4+1 we skipA[2]
9=2+4+3 we skipA[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))]