【问题标题】:getting into infinite loop when using a while loop使用 while 循环时进入无限循环
【发布时间】:2018-05-18 09:34:53
【问题描述】:

我正在使用此代码对第一个数据帧中的每条记录使用数据帧查找。

for i in range(len(a1)):
    title_derived = []
    k = 100000
    print(i)
    for j in range(len(b1)):
        print(j)
        while j < (k + 6):
            #print(b1.iloc[i][10], a1.iloc[j][3])
            if b1.iloc[j][10] == a1.iloc[i][3]:
                print(j,k)
                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 

它打印, 0 0

然后进入无限循环。

【问题讨论】:

  • 你在哪里增加j
  • 您为什么希望它不这样做? j 是 for 循环变量,它不会在 while 内递增
  • 分配l=j并在while循环while l&lt;(k+6)中使用l,并检查l的增量

标签: python while-loop infinite-loop


【解决方案1】:

可能是因为“b1”的长度小于“k + 6”的值。在这种情况下,你永远不会退出 while 循环,最后它会抛出错误。 在这种情况下,您应该首先检查“b1”的最小可能长度,然后确定您的诡计条件。

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2014-11-13
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多