while for loop组合不能在while loop中结束

2024-06-30 11:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个脚本来检查一个数据帧的列的和是否在一定的时间间隔内超过3

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”一段时间,这意味着特定列的值之和不超过三。好啊这是我想要的

然而,当它转到else时,这意味着cloumn的总和超过3,它应该转到下一个“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, 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 loop有什么问题??以及如何使for循环工作


Tags: innumbertargetdfforlenhererange
1条回答
网友
1楼 · 发布于 2024-06-30 11:31:19

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

我希望它能有所帮助,尽管它是相当多的文本

让我们看看执行情况:

  • 您可以定义变量loc_number = 10, k = 2
  • 代码检查k < 3是否为true
  • 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行的数据帧所有元素的总和。这将为每列返回一个值,并再次打印该值
  • 现在,检查这些值中是否有小于3(x < 3),如果是,则将loc_number增加1loc_number = 11)),打印'heloo'并中断for循环
  • 代码打印'probably'
  • 作为k < 3 == True,使用range(0, 409, 11)(在11的步骤中从014)初始化一个新的for循环,它将在第一次迭代中再次设置i = 0
  • 现在i = 0,代码打印11 0,然后计算数据帧中从第0行到第i + loc_number = 0 + 11 = 11行的所有元素的总和。这将为每列返回一个值,如果其中任何一个小于3,则再次检查该值
  • 在这种情况下,loc_number += 1 = 12,它打印'heloo',然后您再次跳出for循环
  • 这一直重复到loc_number = 322。现在,range(0, 14, 322)只返回0,所以for循环只设置i = 0,从第0行到第322行求和,代码打印322 0
  • 现在,没有值小于3,因此any(x < 3)的计算结果为False,并且else被调用。在那里,loc_number保持不变,代码打印'here'
  • 由于for循环在range()迭代器中找不到其他元素,因此for循环结束,代码打印'probably'
  • 现在,使用未更改的range(0, 14, 322)初始化一个for循环,该循环的执行方式与以前相同,没有任何值小于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)

相关问题 更多 >