Python如何移除列表首尾元素并返回?现有代码索引越界报错排查
问题原因说明
你的报错确实和return语句的逻辑写法直接相关,并非return语句本身的语法错误,核心问题是你写了无终止条件的无限递归:
- 你当前的代码逻辑是:每次进入函数都会先删除列表的第一个、最后一个元素,随后直接递归调用
middle(c)返回,没有任何停止递归的判断条件。每次递归列表长度都会减少2,直到列表长度小于2时,再执行del c[0]或del c[-1]就会触发list assignment index out of range的索引越界错误。 - 举个实际运行示例:假设你传入的初始列表为
[1,2,3],第一次调用函数时:- 删第一个元素后列表变为
[2,3](长度2) - 删最后一个元素后列表变为
[2](长度1) - 递归调用
middle(c),进入函数后执行del c[0],列表变为[](长度0) - 执行
del c[-1]时,空列表没有最后一个元素,直接抛出越界异常。
- 删第一个元素后列表变为
正确实现代码
你要实现「移除首尾元素后返回列表」的需求完全不需要递归,两种常用写法如下:
写法1:切片实现(不会修改原列表,更推荐)
def middle(c): # 长度小于等于2的列表移除首尾后为空,可根据需求调整边界处理逻辑 if len(c) <= 2: return [] # 切片c[1:-1]直接取从第二个到倒数第二个的所有元素,返回新列表 return c[1:-1]
写法2:del实现(会修改传入的原始列表)
def middle(c): if len(c) <= 2: return [] del c[0] del c[-1] # 直接返回修改后的当前列表即可,不需要递归 return c
内容的提问来源于stack exchange,提问作者Nan
相关产品推荐
相关产品推荐

