【问题标题】:Function contains infinite loops, and it seems everything is ok函数包含无限循环,似乎一切正常
【发布时间】:2022-01-23 18:13:11
【问题描述】:

我编写了函数,该输入数组是区间列表并返回不重叠的区间。 这是函数:

def mergeOverlappingIntervals(intervals):
    new=[]
    i=0
    while i <len(intervals):    
        if intervals[i][1]<intervals[i+1][0]:
            new.append(intervals[i])
            i+=1
        else:
            p1=i
            p2=i
            while intervals[i][1]<=intervals[i+1][0]:
              i+=1
              p2+=1
            new.append([intervals[p1][0],intervals[p2][1]])
            i=p2
    return new  

但是这个函数包含无限循环。我不清楚为什么这个函数包含无限循环并且没有得到预期的输出。 输入示例:

interval=[
    [1, 2],
    [3, 5],
    [4, 7],
    [6, 8],
    [9, 10]
  ]

outputs=[
  [1, 2],
  [3, 8],
  [9, 10]
]

【问题讨论】:

  • 你试过使用调试器吗?
  • 您是否不清楚它为什么起作用?您的代码也不一定包含无限循环,while 循环只是循环而条件评估为True(因此名称为while),所以如果在某些时候条件评估为False,循环停止。我不清楚你不清楚什么。
  • @Matiiss 但这段代码包含某种无限循环。你可以试试我的例子。对我来说不清楚的是,为什么这段代码包含无限循环
  • intervals 永远不会变短,但i 不一定会在每次迭代中递增。即,如果intervals[i][1] &gt;= intervals[i+1][0]intervals[i][1] &gt; intervals[i+1][0]。因此i &lt; len(intervals) 将永远保持真实。
  • 你应该让你的问题更清楚。在编写时,看起来您的代码给出了预期的输出,并且您不了解 while 循环如何在某些时候停止运行。明确表示您遇到了一些无限循环并且没有得到任何输出。

标签: python for-loop while-loop


【解决方案1】:

您的内部 while 循环使用了错误的条件。当intervals[i][1]大于或等于,不小于或等于intervals[i+1][0]时,您想合并两个区间。

while intervals[i][1] >= intervals[i+1][0]:
    i += 1
    p2 += 1

可能还有其他问题,但这是主要问题。

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2023-03-29
    • 1970-01-01
    • 2014-01-04
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多