如果改变逻辑语句中操作数的位置,有什么区别吗?

问题描述 投票:0回答:2

我在python中编写了以下函数,该函数返回一个子列表(即,它一直进行遍历的列表部分,直到找到一个特定值(在我的情况下为5)而不将其包括在子列表中,并且也停止了进一步迭代) 。

def sublist(a):
    b=[]
    i=0
    while(a[i]!=5 and i<=len(a)-1):
        b.append(a[i])
        i=i+1
    return b

上面的功能在除此a=[1, 6, 2, 3, 9]之外的所有测试用例中都可以正常工作。它给出了以下错误:IndexError: list index out of range

但是当我互换while循环条件的操作数并以以下方式编写相同的代码时,我得到了所有测试用例的输出:

def sublist(a):
    b=[]
    i=0
    while(i<=len(a)-1 and a[i]!=5):
        b.append(a[i])
        i=i+1
    return b

为什么在第一种情况下我没有得到输出?

python python-3.x
2个回答
1
投票
这称为“逻辑短路”,当必须对逻辑表达式求值时,请编程语言观察第一个操作数,并说:“这是一个OR,如果第一个操作数对我来说还可以,那么整个表达式就可以了!”因此它忽略了第二个。

0
投票
[当您用sublist调用a=[1, 6, 2, 3, 9]时,while循环中的i在4之后进一步增加,成为i = 5。
© www.soinside.com 2019 - 2024. All rights reserved.