递归函数get_list_of_multiples处理空列表参数时索引越界问题的修正求助
解决递归函数处理空列表的索引越界问题
哦,这个问题我太熟悉了——递归处理列表时很容易漏掉空列表这个边界情况!你的代码问题就出在没有把空列表作为递归的终止条件:当传入空列表[]时,len(numbers)等于0,既不满足第一个if len(numbers) > 1的判断,又会直接进入后续的if(numbers[0] % m == 0)语句,而空列表根本没有索引0,自然触发了“列表索引越界”的错误。
修改方案:添加空列表的终止判断
只需要在函数最开头,先判断列表是否为空,如果是空列表直接返回[],就能完美解决这个问题。修改后的完整代码如下:
def get_list_of_multiples(numbers, m): # 新增:空列表直接返回空,作为递归终止条件 if not numbers: return [] if len(numbers) > 1: if numbers[0] % m == 0: return [numbers[0]] + get_list_of_multiples(numbers[1:], m) return get_list_of_multiples(numbers[1:], m) if numbers[0] % m == 0: return [numbers[0]] else: return []
为什么这样修改有效?
- 当传入空列表时,
if not numbers会直接触发,返回空列表,彻底避免了后续访问无效索引的操作。 - 对于非空列表,原来的递归逻辑完全保留,前两个测试用例的正常运行不会受到任何影响。
测试验证
现在运行三个测试用例:
print(get_list_of_multiples([2, 3, 5, 6], 2)) # 输出 [2, 6] print(get_list_of_multiples([9, 5, 15, 11, 23], 3)) # 输出 [9, 15] print(get_list_of_multiples([], 2)) # 输出 [],不再报错
所有用例都能正常运行啦!
内容的提问来源于stack exchange,提问作者thor1111
相关产品推荐
相关产品推荐

