while for循环组合不能结束while循环

while for loop combination can't end up while loop

我正在开发一个脚本来检查数据框的列的总和是否在一定间隔内超过三。

loc_number = 10 # start loc image number with 10
k = 2
while k < 3: 
    for i in range(0, int(len(target_df.index)/loc_number), loc_number):
        print(range(0, int(len(target_df.index)/loc_number), loc_number))
        print(loc_number, i)
        loc_target_df = target_df.loc[i: i+loc_number].sum(skipna=True, axis=0)
        print(loc_target_df)
        if any(x < 3 for x in loc_target_df):
            loc_number += 1
            print('heloo')
            break
        else:
            print('here')
            pass
    print('probably')
    continue

一开始好像是到'if'打印了一会儿'heloo',也就是说某列的值之和不超过3。行。这就是我想要的。

然而,当它转到 else 时,这意味着该列的总和超过了三,它应该转到下一个 'for loop' 而不是 'while'。但它一次又一次地进入 while 循环,所以打印出来是这样的:

here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0

我的 while for 循环有什么问题??以及如何使 for 循环工作?

我会回答第一个问题,也许你可以提供更多关于它通过 else 后应该做什么的细节。我有一种感觉,您希望代码做一些与现在完全不同的事情。

希望对您有所帮助,尽管文字有点多。

我们来看看执行情况:

  • 你定义你的变量loc_number = 10, k = 2
  • 代码检查 k < 3 是否为真。
  • 你在loc_number = 10的步骤中定义了一个从0到int(len(target_df.index)/loc_number) = 450的范围,这是一个迭代器,它将在第一次迭代
  • 中设置i = 0
  • 现在 i = 0,代码打印 10 0 并且您计算数据帧中从行 0 到行 i + loc_number = 0 + 10 = 10 的所有元素的总和。这 returns 每列的值,再次打印。
  • 现在,您检查这些值是否小于 3 (x < 3),如果是,则将 loc_number 增加 1 (loc_number = 11), 打印 'heloo' 并跳出 for 循环。
  • 代码打印 'probably'
  • 作为k < 3 == True,你用range(0, 409, 11)初始化一个新的for循环(范围从014,步长为11),这将在第一次迭代中再次设置 i = 0
  • 现在 i = 0,代码打印 11 0 并且您计算数据帧中从行 0 到行 i + loc_number = 0 + 11 = 11 的所有元素的总和。这 returns 每列的值,如果其中任何一个小于 3,将再次检查该值。
  • 在这种情况下,loc_number += 1 = 12,它会打印 'heloo' 并且您再次跳出 for 循环。代码打印 'probably'
  • 重复此操作直到 loc_number = 322。现在,range(0, 14, 322) 仅 returns 0,因此 for 循环仅设置 i = 0,并且您从第 0 行到第 322 行求和,代码打印 322 0
  • 现在,没有小于 3 的值,因此 any(x < 3) 的计算结果为 False 并调用 else。那里,loc_number 保持不变,代码打印 'here'.
  • 由于 for 循环没有在 range() 迭代器中找到另一个元素,因此 for 循环结束并且代码打印 'probably'.
  • 您现在初始化一个 for 循环,range(0, 14, 322) 不变,其执行与之前相同,没有小于 3 的值。
  • 这个圆圈永远不会中断,因为 while 语句总是正确的。

也许有一个混淆点是,python 中的 for 在其他语言中的行为类似于 foreach

此外,我建议 运行 下面的代码片段可以更好地理解 range(start, stop, step) 函数,因为我认为它的行为也与您假设的不同:

for i in range(0, 5, 2):
    print(i)

for k in range(0, 5, 10):
    print(k)