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

Python遍历列表删除元素时偶数14未被提取的问题求助

问题:提取列表偶数时出现遗漏

你的代码:

data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
for item in data:
    if (item % 2) == 0:
        data.remove(item)
        even.append(item)
    else:
        pass

运行结果:

muyiwa@mobadara-pc:~/Documents/projects/DSA-2/Unit2$ python fixed_.code.py 
The even elements are: [4, 12, 0, 10]
The odd elements are: [9, 5, 17, 14, 1, 3, 9]

问题原因:

你在遍历列表的同时修改了原列表,这会打乱迭代器的遍历顺序。比如当循环处理12时,它被移除后原列表元素向前移位,原本在12后的14会移动到12的索引位置,但迭代器已经走到下一个索引,直接跳过了14的检查,导致它被错误留在奇数列表里。

解决方案:

方案1:遍历原列表的副本

修改原列表时不干扰遍历过程:

data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
# 遍历data的副本,避免修改原列表影响遍历
for item in list(data):
    if item % 2 == 0:
        data.remove(item)
        even.append(item)

print(f"The even elements are: {even}")
print(f"The odd elements are: {data}")

方案2:创建新列表分别存储(推荐)

不修改原列表,直接生成偶数、奇数新列表,逻辑更清晰:

data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
odd = []

for item in data:
    if item % 2 == 0:
        even.append(item)
    else:
        odd.append(item)

print(f"The even elements are: {even}")
print(f"The odd elements are: {odd}")

方案3:列表推导式(简洁写法)

用Python列表推导式一行生成目标列表,代码更简洁:

data = [9,4,5,17,12,14,1,0,3,10,9]
even = [item for item in data if item % 2 == 0]
odd = [item for item in data if item % 2 != 0]

print(f"The even elements are: {even}")
print(f"The odd elements are: {odd}")

以上三种方法运行后,14都会被正确识别为偶数加入even列表,奇数列表里不会再出现它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:48:24