我用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
为什么我在第一种情况下没有得到输出?
这被称为“逻辑短路”,当一个逻辑表达式需要计算时,编程语言观察第一个操作数,然后说:“这是一个OR,如果第一个操作数对我来说没问题,整个表达式就没问题!” 所以它忽略了第二个。
对于AND,这是一样的,但是:“这是一个AND,如果第一个操作数可以,我必须检查第二个操作数,否则整个表达式都不可以。”
在这种情况下,您首先检查一个[i],该[i]
可能
抛出一个异常,然后为i<=len(a)-1。
我做了一点eli5。
编辑:我忘了,如果你不使用括号,也请看这个表https://en.wikipedia.org/wiki/logical_connective#order_of_precerence
同时,作为一名计算机专家,你必须对短电路有很好的了解,它可以帮助你提高性能