Python嵌套for循环中变量pp未从0开始的问题排查
代码循环变量异常原因分析
你期望这段代码遍历列表y_vals,计算符合y_vals[jj] > y_vals[pp]的元素差值,移除对应元素后重新循环,且内层变量pp从0开始,但实际运行时pp从8开始,不符合预期。
相关代码
y_vals,y_vals_max=[],[] y_vals = [7,6,5,4,3,2,1,7,6,5,4,3,2,1] c = 0 for jj in range(0,len (y_vals),1): for pp in range(1, len(y_vals),1): if y_vals[jj] > y_vals[pp]: if (y_vals[jj] - y_vals[pp]) >=0: c = c + 1 y_vals_max.append(y_vals[jj]-y_vals[pp]) print(y_vals[jj] - y_vals[pp]) # y_vals_max.append(t_vec[jj]) else: print(y_vals_max) for jj in range(0,c+1,1): y_vals.remove(y_vals[jj]) jj=0 pp=0
预期输出
1
2
3
4
5
6
[1, 2, 3, 4, 5, 6]
1
2
3
4
5
6
[1, 2, 3, 4, 5, 6]
异常原因
- for循环变量无法通过手动赋值重置:Python的
for循环基于迭代器实现,内层的for pp in range(1, len(y_vals),1)会在循环启动前生成完整的迭代序列(初始是1到13)。你在else分支里手动给pp=0只是临时修改变量值,下一次循环仍会按原迭代序列取下一个值。第一次触发else分支时pp走到7,手动设为0后,下一次迭代直接取序列里的8,这就是pp从8开始的核心原因。 - 变量名冲突+列表修改导致逻辑混乱:你在内层else里又定义了
for jj循环,直接覆盖了外层的jj变量;同时直接修改y_vals移除元素后,外层for jj循环是基于初始列表长度生成的迭代序列,后续的jj值和修改后的列表完全不匹配,整个循环逻辑彻底混乱。 - 内层循环起始值不符合预期:你要求pp从0开始,但代码里写的是
range(1, len(y_vals),1),初始就从1开始,这本身就和你的预期逻辑不符。
内容的提问来源于stack exchange,提问作者Fabiano
相关产品推荐
相关产品推荐

