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

从列表筛选奇偶数字至独立列表的代码迭代异常求助

列表奇偶筛选代码的问题分析与修复

问题根源

  • 遍历中修改原列表导致迭代中断:第二个循环for x in nums时,你用nums.pop()直接删除列表元素,遍历的列表长度在不断缩短,迭代器会提前终止。比如5个元素的列表,迭代到第3次时列表只剩2个元素,循环直接停了,所以只执行3次迭代。
  • 逻辑对应完全错误:你判断的是nums.pop()取出的y的奇偶性,但往奇偶列表里添加的却是当前迭代的x,这俩根本不是同一个数,完全搞混了判断和存储的对象。
  • 顺序混乱:pop()默认取列表最后一个元素,相当于从后往前处理数据,自然打乱了原输入顺序。

修复后的代码(最优解)

直接遍历原列表,不修改它,逻辑清晰且效率高:

nums = [] 
even = []
odd = []
for i in range(5): 
    num = int(input('Give me a number:      ')) 
    nums.append(num) 

# 遍历原列表,逐个判断奇偶并分类存储
for num in nums:
    if num % 2 == 0:
        even.append(num)
    else:
        odd.append(num)

print('奇数列表:', odd, '偶数列表:', even)

输入1-5的测试用例时,会输出:奇数列表: [1, 3, 5] 偶数列表: [2, 4],完全符合预期。

可选方案(若非要用pop操作)

如果一定要通过pop来处理,可以遍历原列表的副本,避免迭代时修改原列表:

nums = [] 
even = []
odd = []
for i in range(5): 
    num = int(input('Give me a number:      ')) 
    nums.append(num) 

# 遍历nums的副本,原列表用来执行pop操作
for _ in nums.copy():
    y = nums.pop()
    if y % 2 == 0:
        even.append(y)
    else:
        odd.append(y)

# 注意:pop默认从末尾取数,结果顺序会反转,若要保持原顺序可改用pop(0),但效率较低
print('奇数列表:', odd, '偶数列表:', even)

内容的提问来源于stack exchange,提问作者Adarsh T Saji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:30:00