如何不反转列表查找最后一个奇数的索引?代码pop索引越界排查
问题分析与解决
你的代码核心错误是把奇数的数值当成索引传给了pop方法:
- 循环里你把
last_odd赋值为奇数的数值(比如93、15这些),但list.pop()需要的是元素的索引位置(比如你的列表长度是15,合法索引范围是0到14)。当奇数的数值大于等于列表长度时,必然触发索引越界错误。
修正后的代码
def remove_last_odd(numbers): last_odd_index = -1 # 用-1标记未找到奇数 # 用enumerate同时获取索引和元素值 for idx, num in enumerate(numbers): if num % 2 == 1: last_odd_index = idx # 记录当前奇数的索引位置 if last_odd_index != -1: numbers.pop(last_odd_index) numbers = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 93, 48, 76, 15, 6] remove_last_odd(numbers) print(numbers) # 输出:[1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 93, 48, 76, 6]
关键改动说明
- 用
enumerate遍历列表,同时拿到元素的索引(idx)和数值(num),避免手动通过索引取值的混乱 - 把
last_odd改成last_odd_index,专门存储奇数的索引位置,而非数值 - 初始值设为-1,用来判断是否找到过奇数,不需要额外的
has_odd变量
内容的提问来源于stack exchange,提问作者JoeP
相关产品推荐
相关产品推荐

