While A & B 与 A if B 之间的区别



我正在学习用Python查找数组中最长的峰值。这是可行的代码:

def longestPeak(array):
i = 1
currentPeakLength = 0
longestPeakLength = 0
while i < len(array) - 1:
isPeak = array[i] > array[i - 1] and array[i] > array[i + 1]
if not isPeak:
i += 1
continue
leftIdx = i - 2
while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1 and array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1
currentPeakLength = rightIdx - leftIdx - 1
if currentPeakLength > longestPeakLength:
longestPeakLength = currentPeakLength
i = rightIdx
return longestPeakLength

现在,当我试着自己做的时候,我改变了这个部分:

leftIdx = i - 2
while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1 and array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1

进入:

leftIdx = i - 2
while leftIdx >= 0:
if array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1
rightIdx = i + 2
while rightIdx <= len(array) - 1:
if array[rightIdx] < array[rightIdx - 1]:
rightIdx += 1

然后我进入了无限循环,我现在仍然困惑。。。提前谢谢。

假设leftIdx >= 0当前为True:

while leftIdx >= 0 and array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1

将在array[leftIdx] < array[leftIdx + 1]False时停止循环

while leftIdx >= 0:
if array[leftIdx] < array[leftIdx + 1]:
leftIdx -= 1

将保持循环进行,但只是不执行该迭代的CCD_ 5。

最新更新