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

Python基于商品条码实现产品列表二分查找报错排查

二分查找实现商品条码检索报错排查

问题根因

你的代码存在3个直接触发报错/逻辑失效的问题:

  • 函数入参缺失:binary_search仅定义了list_of_products(商品列表)一个入参,没有接收需要查找的目标条码这个核心参数,根本无法指定检索目标。
  • 类型不匹配错误:函数内部把bar_code初始化为空列表[],后续拿商品实例返回的条码值(一般为数字或字符串类型)和列表做大小比较,会直接触发类型比较异常,代码中断运行。
  • 缺少二分查找前置校验:二分查找仅对按检索主键升序排序的有序列表有效,你没有对传入的商品列表做按条码排序的预处理,哪怕修复语法问题,也会出现查找结果错误、漏匹配的问题。

修正后代码

def binary_search(list_of_products, target_barcode):
    low = 0
    high = len(list_of_products) - 1

    while low <= high:
        mid = (low + high) // 2
        current_product_barcode = list_of_products[mid].get_barcode()
        
        if current_product_barcode < target_barcode:
            # 目标值更大,丢弃左半区间,检索右侧
            low = mid + 1
        elif current_product_barcode > target_barcode:
            # 目标值更小,丢弃右半区间,检索左侧
            high = mid - 1
        else:
            # 匹配成功,返回商品在列表中的下标
            return mid
    
    # 遍历完区间未找到匹配商品,返回-1
    return -1

正确调用方式

  • 先对商品列表按条码做升序排序,满足二分查找的有序要求:
# 按商品条码升序排序
sorted_product_list = sorted(origin_product_list, key=lambda product: product.get_barcode())
  • 传入排序后的列表和待查找的目标条码调用函数:
# 示例:查找条码为"6901234567890"的商品
match_index = binary_search(sorted_product_list, "6901234567890")
  • 对返回值做分支处理:返回值大于等于0时取下标对应商品即可,返回-1时代表无匹配商品,做对应的空结果提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:33:00