You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不反转列表查找最后一个奇数的索引?代码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]

关键改动说明

  1. 用enumerate遍历列表,同时拿到元素的索引(idx)和数值(num),避免手动通过索引取值的混乱
  2. 把last_odd改成last_odd_index,专门存储奇数的索引位置,而非数值
  3. 初始值设为-1,用来判断是否找到过奇数,不需要额外的has_odd变量

内容的提问来源于stack exchange,提问作者JoeP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:25:26