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

问题描述

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

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,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。好。这就是我想要的。

但是,当转到其他位置时,这意味着cloumn的总和超过三,则应转到下一个“ for循环”而不是“ 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,322)
322 0

我的for循环的问题是什么?以及如何使for循环起作用?

解决方法

我将回答第一个问题,也许您可​​以提供更多详细信息,说明一旦它通过else后应该做什么。我感觉到您希望代码执行与现在完全不同的操作。

我希望它会有所帮助,尽管它是很多文字。

让我们看看执行情况:

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

也许令人困惑的一点是,Python中的while的行为类似于其他语言中的for

此外,我建议运行以下代码片段以更好地理解foreach函数,因为我认为这的行为也与您想象的不同:

range(start,stop,step)