【问题标题】:breaking an outer Python for loop based on condition in inner for loop根据内部 for 循环中的条件打破外部 Python for 循环
【发布时间】:2018-05-18 07:48:33
【问题描述】:

我正在使用以下代码。

for x in range(100):
        print('inside 1st loop')
        for y in range(25,60):
            print('inside second loop')
            if y >= x:
            print ('y is now greater than x')

是否有可能一旦内部for循环中的if条件满足,在运行5个以上内部循环后,外部循环会自行中断。

实际代码如下:

for i in range(len(a1)):
            title_derived = []
            print(i)
            for j in range(len(b1)):
                #print(b1.iloc[i][10], a1.iloc[j][3])
                if b1.iloc[j][10] == a1.iloc[i][3]:
                    print('1st if ' + str(j))
                    print (b1.iloc[j][1], a1.iloc[i][11], b1.iloc[j][5])
                    if (((pd.to_datetime(b1.iloc[j][1]) <= pd.to_datetime(a1.iloc[i][11]) <= pd.to_datetime(b1.iloc[j][5]))) or ((pd.to_datetime(b1.iloc[j][1]) <= pd.to_datetime(a1.iloc[i][8]) <= pd.to_datetime(b1.iloc[j][5])))) :
                        print('2nd if' + str(j))
                        title_derived.append(b1.iloc[j][15])
                        print('inserted ' + b1.iloc[j][15] + ' in ' + str(i) + ' th record ')
            a1.iat[i,65] = title_derived 

现在,我有两个数据框,第一个中的每条记录(大约 10000 条记录)查找其他数据框中的每条记录(40000 条记录)。有时最多可以有 4-5 个符合条件的连续条目。

所以,一旦在第二个循环中满足条件,我想再完成五次迭代并打破它。

【问题讨论】:

  • 将代码放入函数中,并从内部循环中return
  • 可能重复:Breaking out nested loops
  • 最佳方案取决于您的实际代码,因此您提供给我们的示例代码越真实越好。现在它是微不足道的。
  • @AlexHall 实际代码非常适合我的情况。如果有帮助,让我尝试添加它。
  • 你不能从内循环中断开外循环,因为break-command 将始终反映它嵌套的最内循环。对于for-loops,这种行为是非常有意的,因为当您知道迭代的范围并且它是固定的时,应该(仅)使用 for 循环。否则建议使用 while 循环。

标签: python for-loop break


【解决方案1】:

假设条件打破循环,如果外部变量大于内部变量->打破循环

def inner_loop_function(outer_loop_variable):
  for y in range(25,60):
    if y<=first_loop_var:
      return True
  return False

外循环

for x in range(0, 100):
  print("1st Loop", x)
  var = inner_loop_function(x)
  if var == True:
    # Breaking outer Loop
    break

【讨论】:

    【解决方案2】:

    尝试添加一个状态变量来指示内部循环何时完成。

    请注意,您的示例将从 25>0 开始立即结束。

    done = False
    for x in range(100):
        if done is True:
            print('Inner loop is done')
            break
    
        print ('inside 1st loop')
        print x
        for y in range(25,60):
            print ('inside second loop')
            print y
            if y >= x:
                print ('y is now greater than x')
                done = True
                break
    

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 2012-12-07
      • 1970-01-01
      • 2015-03-21
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      相关资源
      最近更新 更多