我在下面的代码中无法理解第二个for循环:
di = [4,5,6]
for i in range(len(di)):
total = di[i]
for j in range(i+1,len(di)):
total += di[j]
curr_di = total / ((j-i+1)**2)
我无法想象for j in range(i+1,len(di)):
中发生的事情,特别是i+1
部分使我感到困惑。第一个循环中的i对第二个循环有什么影响?
答案 0 :(得分:0)
第一个循环只是循环遍历列表di
中可用的索引。对于该循环中的每个条目,第二个循环然后检查di
的其余部分。
因此,在第一次迭代中,我们正在检查值4
。然后,第二个循环将遍历列表,从该位置开始,一直运行到末尾(它将检查项5
和6
)。
在第二次迭代中,我们将检查条目5
,然后在第二个循环中遍历列表的其余部分(在本例中为6
)。有道理吗?
正如评论员所指出的,打印语句是您的朋友。这是带有一些打印语句的示例,以显示i
和j
的变化:
di = [4,5,6,7]
for i in range(len(di)):
print(f"i: {i}")
total = di[i]
for j in range(i+1, len(di)):
print(f" - j: {j}")
total += di[j]
curr_di = total / ((j-i+1)**2)
输出:
i: 0
- j: 1
- j: 2
- j: 3
i: 1
- j: 2
- j: 3
i: 2
- j: 3
i: 3
答案 1 :(得分:0)
这是典型的“ 2组合”循环。列表中的每个项目(索引i)都与后续的每个项目(索引j)一起处理。
看起来像序列处理来计算部分和:
total = ∑ (i = 1..n)(∑ (j = i..n) a [j])