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

delete_starting_evens函数异常:未正确删除列表起始偶数求助

问题分析与解决方法

你的代码问题出在用for循环遍历列表时直接删除元素,这会导致迭代器的索引错乱。因为for循环是基于列表初始的元素顺序和长度生成迭代器的,当你删除第一个元素后,后续元素会向前移位,但迭代器仍按原索引推进,直接跳过了本该删除的起始偶数。

正确解法一:用while循环精准删除起始偶数

直接循环检查列表的第一个元素,只要满足条件就删除,直到遇到奇数或列表为空:

def delete_starting_evens(my_list):
    # 只要列表非空且首元素是偶数,就删除首元素
    while my_list and my_list[0] % 2 == 0:
        my_list.pop(0)
    return my_list

a=[4,8,10,12,14,15,16,17,19,20]
print(delete_starting_evens(a))  # 输出: [15, 16, 17, 19, 20]

这种方法逻辑直接,每次都针对当前列表的第一个元素操作,不会出现索引错位的问题。

正确解法二:返回新列表(不修改原列表)

如果不想修改传入的原列表,可以先找到第一个奇数的位置,再返回从该位置开始的子列表:

def delete_starting_evens(my_list):
    # 遍历找到第一个奇数的索引
    for idx, num in enumerate(my_list):
        if num % 2 != 0:
            return my_list[idx:]
    # 全是偶数的情况,返回空列表
    return []

a=[4,8,10,12,14,15,16,17,19,20]
print(delete_starting_evens(a))  # 输出: [15, 16, 17, 19, 20]

这个方法更安全,不会对原列表产生副作用,适合需要保留原数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:32:51