问题描述
我正在开发一个脚本,以检查数据框的列的总和是否超过一定间隔。
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)