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

Python递归求数组子集时result数组全为空子集是什么原因?

问题原因分析

你遇到的问题是Python可变对象的引用传递特性导致的:

  • Python中的列表属于可变对象,你在递归过程中全程操作的是同一个subset列表实例,往result中追加的时候,实际存入的是这个实例的内存引用,而非当前时刻列表内容的副本。
  • 你在递归基例中打印subset时,输出的是当时的瞬时值,此时后续的pop操作还未执行,所以内容是正确的。但递归全部执行结束后,所有的pop操作会把最初的subset列表清空,result中存储的所有引用指向的都是这个最终为空的列表,因此输出全是空嵌套数组。
修复方案

只需要在往result中追加元素时,对当前的subset做一次浅拷贝,存入独立的新列表对象即可,修改hel函数的基例代码:

def hel(arr, subset, i,result):
    if i == len(arr):
        # 改为追加subset的拷贝,而非原列表的引用
        result.append(subset.copy())
        
    else:
        subset.append(None)
        hel(arr, subset,i+1, result)
        subset.pop()
        subset.append(arr[i])
        hel(arr,subset,i+1, result)
        subset.pop()

修改后运行see_sequences([1,2,3])就能得到正确的子集结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:02