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

如何修改Python代码实现列表偶数在前、奇数在后的重排需求

原代码错误点

  • 判定元素为奇数后,你追加到列表末尾的是当前索引i,不是奇数元素本身s[i],这也是你错误输出里出现0、2、4的直接原因
  • 原列表里的奇数没有被移除,会同时留在列表前部
  • 遍历范围写为range(len(s)-1),会漏掉列表最后一个元素的判断
  • 边遍历边修改原列表长度的逻辑本身就容易出现遍历混乱,不推荐用这种写法

最优修改方案

直接拆分偶数和奇数再合并即可,逻辑清晰时间复杂度低:

def evenorodd(s):
    # 分别收集所有偶数、奇数
    evens = [num for num in s if num % 2 == 0]
    odds = [num for num in s if num % 2 != 0]
    # 偶数在前、奇数在后拼接返回
    return evens + odds

s = [1,2,3,4,5,5]
print(evenorodd(s))
# 输出为 [2, 4, 1, 3, 5, 5],完全符合偶数全在奇数前的要求

注:你给出的期望输出[0,2,2,4,4,1,3,5,5]和输入列表[1,2,3,4,5,5]的元素无法对应,应为笔误。如果确实有额外的元素规则,可以补充说明后调整逻辑。

按原有遍历思路修改的版本

如果你坚持要用遍历追加的写法,可按如下调整:

def evenorodd(s):
    s = list(s)
    origin_len = len(s)
    # 按原始长度遍历,避免列表变长影响遍历范围
    for i in range(origin_len):
        if s[i] % 2 != 0:
            # 追加奇数元素而非索引
            s.append(s[i])
    # 保留前半部分的偶数,拼接后半部分追加的奇数
    return [num for num in s[:origin_len] if num % 2 == 0] + s[origin_len:]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03