我正在辅导基本的搜索和排序。在插入排序中,当我的数值大于它之前的值时,我会负向迭代。当然,这种方法可能会导致问题,因为有一个检查调用不存在的数组[-1]。
如下面粗体下划线所示,添加&x> 0布尔值可防止索引问题。
我的问题是这是怎么回事?不会调用数组[-1]来确保两个布尔值的有效性吗?
the_list = [10,2,4,3,5,7,8,9,6]
for x in range(1,len(the_list)):
value = the_list[x]
while value < the_list[x-1] **and x > 0**:
the_list[x] = the_list[x-1]
x=x-1
the_list[x] = value
print the_list
答案 0 :(得分:0)
我不确定我完全理解这个问题,我不知道这是什么编程语言,但大多数现代编程语言默认使用所谓的短路布尔评估,所以一旦知道结果,就不会进一步评估逻辑表达式。
您可以使用它来防范范围溢出,如下所示:
while x > 0 and value < the_list[x-1]
但是这里检查x的范围必须在使用之前。
答案 1 :(得分:0)
AND
操作返回true
,因此如果其中一个参数为假,则无法检查其他参数,因为此时已知最终值。至于你的例子,通常评估从左到右,但它不是一个原则,它看起来你使用的语言不遵循该规则(另外它仍然应该在阵列查找时崩溃)。但是可能是,这个特定的实现以某种方式优化了这个(恕我直言并不是一个好主意)并在查找数组之前首先评估“更简单”的东西(比如检查x > 0
)。检查规范为什么这个确切的顺序适合你,就像在大多数流行语言中一样,如果在查找之前不评估测试x > 0
,你仍会崩溃