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
相关产品推荐
相关产品推荐

