Python二分搜索函数改造:实现分步打印搜索子列表及拆分过程
修正二分搜索函数以打印搜索过程
我来帮你调整这个二分搜索函数,让它能按照预期打印出每一步的搜索子列表和拆分过程~你的代码已经实现了二分搜索的核心逻辑,但缺少了打印拆分细节(左子列表、中点元素、右子列表)的步骤,所以没法得到想要的输出。
修改后的代码
def binary_search(a_list, item): # 打印当前正在搜索的子列表 print(a_list) if a_list == []: return False midpoint = len(a_list) // 2 element = a_list[midpoint] # 打印拆分后的左子列表、中点元素、右子列表 print(f"{a_list[:midpoint]} {element} {a_list[midpoint+1:]}") if item == element: return True elif item < element: return binary_search(a_list[:midpoint], item) else: return binary_search(a_list[midpoint + 1:], item) # 测试代码 test_list = [0,1,2,8,13,17,19,32,42] binary_search(test_list,3) binary_search(test_list,13)
输出结果
运行上述代码后,输出如下:
[0, 1, 2, 8, 13, 17, 19, 32, 42] [0, 1, 2, 8] 13 [17, 19, 32, 42] [0, 1, 2, 8] [0, 1] 2 [8] [8] [] 8 [] [] [0, 1, 2, 8, 13, 17, 19, 32, 42] [0, 1, 2, 8] 13 [17, 19, 32, 42]
这个结果和你给出的预期输出几乎一致,预期输出里搜索3时多出来的一个[]应该是笔误——递归到空列表时只会打印一次[],不会重复输出。
代码改动说明
- 补充拆分过程打印:在计算出中点和中点元素后,我们添加了一行代码,打印当前子列表拆分后的左半部分、中点元素、右半部分,完美匹配预期的格式。
- 保留核心逻辑:原代码的二分搜索递归逻辑完全保留,只是补充了打印步骤,不会影响搜索功能的正确性。
内容的提问来源于stack exchange,提问作者Joker




