Binary Search(二分查找)查询无法返回正确结果始终返回False问题排查
代码核心错误点
- 初始调用的
r参数传值错误:你传入的是列名字符串的长度len('Publication date (standardised)')-1,而非目标列有效数据的总长度,搜索范围远小于实际数据集,自然无法匹配到目标值 - 缩进逻辑错误:二分查找的匹配判断、递归调用代码没有缩进在
if r >= l代码块内,当r < l时仍会执行后续逻辑,此时mid未定义,会触发运行异常 - 冗余操作过多:每次递归都会重新读取CSV、生成并排序列表,不仅运行效率极低,还增加了文件IO异常的概率
- 排序逻辑位置错误:
sorted_list赋值放在for循环内部,每新增一个元素就执行一次排序,属于完全不必要的重复计算
修正后代码
import csv def BinarySearch(sorted_list, l, r, keyword): if r >= l: mid = l + (r - l) // 2 if sorted_list[mid] == int(keyword): return mid elif sorted_list[mid] > int(keyword): return BinarySearch(sorted_list, l, mid - 1, keyword) else: return BinarySearch(sorted_list, mid + 1, r, keyword) else: return -1 # 提前读取CSV并生成排序后的目标列列表,避免重复操作 def get_sorted_column(filename, column): newlist = [] with open(filename, newline='', encoding="utf-8-sig") as csvfile: reader = csv.DictReader(csvfile) for row in reader: if row[column] != "": newlist.append(int(row[column])) return sorted(newlist) if __name__ == "__main__": sorted_dates = get_sorted_column('bl_printed_music_500.csv', 'Publication date (standardised)') keyword = input("Enter your keyword: ") # 初始r参数传排序后列表的最大索引 result = BinarySearch(sorted_dates, 0, len(sorted_dates)-1, keyword) print(result != -1)
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

