python 逻辑运算符and两边的语句的顺序问题

最近用python写了一个堆排序的代码,在向下调整的过程中发现了一个问题

if语句中形如上图它的结果是正确的

 

但是,如果将and两边的语句变换一下位置,结果显示超出列表索引位置。

我想问一下,and 的两边的判断对于语句顺序有关吗?

这句代码是堆向下调整过程中,首先判断两个孩子节点哪个大,然后大的子节点取代根结点。

跟顺序有关系,and左边如果为假,就不再计算右边的表达式,即使右边的表达式可能会抛异常。如果左边的表达式为真才会计算右边的表达式

从安全编码的角度,一定要先判断j+1的合法性,否则li访问越界