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

时间:2020-11-06 00:18:12

标签: python if-statement while-loop

我正在学习使用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

然后我进入无限循环,现在我仍然很困惑... 预先感谢。

1 个答案:

答案 0 :(得分: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

将使循环继续进行,但不会对该迭代执行leftIdx -= 1