为何binary_search函数被传入空列表?原列表并非空列表
问题原因及修复方案
核心原因
你的selection_sort函数虽然能输出(比如打印)有序列表,但它错误地返回了空列表,而非排序后的目标列表。当你调用binary_search(selection_sort(nums), 24)时,binary_search实际接收的第一个参数是空列表,自然无法找到目标值24,返回None。
常见的错误场景:
- 函数内部生成了有序列表(比如用
sorted_nums变量存储结果),但最终没有return sorted_nums,反而写了return []。 - 函数是原地修改原列表完成排序,但最后没有
return nums,而是错误返回了空列表。
修复方法
修改selection_sort函数,确保它返回排序后的列表:
原地排序实现(修改原列表)
def selection_sort(nums): for i in range(len(nums)): min_idx = i # 寻找未排序部分的最小值索引 for j in range(i + 1, len(nums)): if nums[j] < nums[min_idx]: min_idx = j # 交换当前元素与最小值元素 nums[i], nums[min_idx] = nums[min_idx], nums[i] # 返回排序后的原列表 return nums
非原地排序实现(生成新列表)
def selection_sort(nums): sorted_nums = nums.copy() # 复制原列表避免修改输入 for i in range(len(sorted_nums)): min_idx = i for j in range(i + 1, len(sorted_nums)): if sorted_nums[j] < sorted_nums[min_idx]: min_idx = j sorted_nums[i], sorted_nums[min_idx] = sorted_nums[min_idx], sorted_nums[i] # 返回新的有序列表 return sorted_nums
修改后,binary_search(selection_sort(nums), 24)就能正确接收排序后的列表,执行二分查找。
内容的提问来源于stack exchange,提问作者Sam Flynn
相关产品推荐
相关产品推荐

