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

在元组列表中执行二分查找出错,输入'BB'无法得到正确结果

元组列表二分查找失败的问题解决

你的代码存在两个核心错误,导致无法正确定位目标元组:

错误点分析

  • 比较对象错误:你直接用字符串 "BB" 和整个元组 arr[m] 对比,得到的是布尔值(True/False),后续基于布尔值的大小判断(res > 0/res < 0)完全不符合二分查找逻辑——我们需要比较的是元组中的国家代码(第一个元素),而非整个元组。
  • 相等判断逻辑错误:原代码中当 x != arr[m] 时直接返回 m-1,这完全违背二分查找规则,正确逻辑是找到匹配项时直接返回当前索引 m。

修正后的代码

alldata = [('BA', 'Bosnia and Herzegovina', 44.0, 18.0), ('BB', 'Barbados', 13.17, -59.53), ('BD', 'Bangladesh', 24.0, 90.0), ('BE', 'Belgium', 50.83, 4.0), ('BF', 'Burkina Faso', 13.0, -2.0), ('BG', 'Bulgaria', 43.0, 25.0), ('BH', 'Bahrain', 26.0, 50.55), ('BJ', 'Benin', 9.5, 2.25), ('BM', 'Bermuda', 32.33, -64.75), ('BN', 'Brunei Darussalam', 4.5, 114.67)]

def binarySearch(arr, x):
    l = 0
    r = len(arr)-1
    while l <= r:
        m = l + ((r - l) // 2)
        # 仅对比元组的第一个元素(国家代码)
        current_code = arr[m][0]
        if x == current_code:
            # 找到匹配项,直接返回当前索引
            return m
        elif x > current_code:
            # 目标代码更大,调整左边界到右半区
            l = m + 1
        else:
            # 目标代码更小,调整右边界到左半区
            r = m - 1
    # 未找到匹配项时返回-1
    return -1

inputq = "BB"
result_index = binarySearch(alldata, inputq)
if result_index != -1:
    print(alldata[result_index])
else:
    print("未找到匹配的国家代码")

代码说明

  1. 修正比较对象:将对比对象改为 arr[m][0],确保基于国家代码执行二分查找的核心逻辑。
  2. 修复二分逻辑:
    • 匹配成功时直接返回当前索引,符合二分查找的终止条件。
    • 根据字符串大小对比结果,正确调整左右边界,缩小查找范围。
  3. 简化输出逻辑:无需遍历整个列表,直接通过返回的索引获取目标元组,提升效率。

内容的提问来源于stack exchange,提问作者khamsablao laowords

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:55:18