You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python二分查找疑问:索引处理、字符串比较及数组排序影响

关于二分查找的三个疑问解答

1. 代码中len(inventory)-1里的-1有什么作用?

Python列表采用0索引规则,比如5元素数组的合法索引范围是0到4。len(inventory)返回的是数组元素总个数(这里是5),直接用它作为high的初始值会超出数组最大合法索引,后续访问inventory[high]时会触发索引越界错误。减1之后,high的初始值就对应数组最后一个元素的索引(4),确保所有索引访问都是合法的。

2. SearchItem如何判断自身与inventory[Mid]的大小关系?

在Python里,同类型变量可直接用<、>、==这类比较运算符对比:

  • 如果是字符串,会按Unicode码点逐字符比较。比如"a" < "b"结果为True,因为"a"的Unicode码点(97)小于"b"(98);多字符字符串会从第一个字符开始依次对比,直到分出大小。
  • 如果是数字,直接对比数值大小即可。
  • 不同类型(比如字符串和数字)直接比较会报错,所以二分查找的数组必须是同类型元素组成的。

3. 为何将字符串"a"放在数组不同位置时,查找结果不同(一个找到位置5,一个显示不存在)?

核心原因是二分查找的前提是数组必须有序:

  • 若数组无序,二分查找的逻辑完全失效,它只会按中间值对比缩小范围,根本无法定位正确位置,甚至会返回错误索引(比如你提到的位置5,这其实是数组越界的结果——如果初始high没减1,代码可能会访问不存在的索引5,误判为找到目标)。
  • 只有当数组有序(比如按字典序排列的字符串数组),二分查找才能正确定位目标元素。把"a"放在无序数组里,代码大概率找不到;放在有序数组的对应位置,才能返回正确索引。

内容的提问来源于stack exchange,提问作者AHM Mamun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:40:21