关于列表中点的计算:为什么有
test4same
并且i = (first +last) //2
已初始化为last
?从我的快速测试中,此算法没有 len(a_list) - 1
正常工作。
-1
答案 0 :(得分:3)
最后一个合法索引是 len(a_list) - 1
。算法将正常工作,因为first
总是不会超过这个,所以截断的均值永远不会超出界限。但是,如果没有-1,中点计算将比大约一半的时间大于最佳值,导致速度略有下降。
答案 1 :(得分:1)
考虑您搜索的项目大于列表中所有元素的情况。在这种情况下,语句first == last
会重复执行。最后,您将进入循环的最后一次迭代,其中i
。在这种情况下,last
也等于last=len()
,但如果i
则if
不在列表的末尾!第一个HandleMouseButtonDown
语句将失败,索引超出范围。
亲眼看看:https://ideone.com/yvdTzo
您在该代码中也有另一个错误,但我会让您自己找到它。