【发布时间】: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] >= intervals[i+1][0]和intervals[i][1] > intervals[i+1][0]。因此i < len(intervals)将永远保持真实。 -
你应该让你的问题更清楚。在编写时,看起来您的代码给出了预期的输出,并且您不了解 while 循环如何在某些时候停止运行。明确表示您遇到了一些无限循环并且没有得到任何输出。
标签: python for-loop while-loop