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

如何编写递归分隔函数,解决Python奇偶数值分割时的列表重置问题

问题原因

  • 你的内部函数版本中,main.append(evenList)和main.append(oddList)的逻辑放在了递归调用的后面,每次处理完一个元素递归返回时都会执行一次,列表长度有多少就会重复添加多少次奇偶列表,才会出现大量重复结果
  • 拼接最终结果的逻辑不需要放在递归内部,只需要所有元素都处理完成之后再拼接奇偶列表返回即可

修复后的代码

def separateNumbers(L):
    evenList = []
    oddList = []
    def inner(L):
        if len(L) == 0:
            return
        if L[0] % 2 == 0:
            evenList.append(L[0])
        else:
            oddList.append(L[0])
        # 递归处理剩余元素
        inner(L[1:])
    inner(L)
    # 所有元素处理完后再拼接结果,仅拼接一次
    return [oddList, evenList]

测试验证

输入测试:

inputList = [1,2,3,4,5,6]
print(separateNumbers(inputList))

输出结果:

[[1, 3, 5], [2, 4, 6]]

可选参考:无内部函数的纯递归实现

如果不想借助外部变量存储结果,可以用纯递归返回值拼接的方式实现,代码更简洁:

def separateNumbers(L):
    if not L:
        return [[], []]
    # 先获取剩余元素的拆分结果
    odd, even = separateNumbers(L[1:])
    # 把当前元素加到对应列表头部
    if L[0] % 2 == 0:
        even.insert(0, L[0])
    else:
        odd.insert(0, L[0])
    return [odd, even]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:36:04