在python中打印数组的子集

在python中打印数组的子集,python,python-3.x,recursion,Python,Python 3.x,Recursion,我试图用python打印数组的子集,但我发现GetNone类型是不可编辑的错误 def printSubs(l,out): if (len(l) == 0): print(*out) return printSubs(l[1:],out) printSubs(l[1:],out.append(l[0])) printSubs([15,20,12],[]) 这抛出None类型不是iterable错误,但当我将out复制到一个新数组中,然后将l[0]追加到该数组中并将

我试图用python打印数组的子集,但我发现GetNone类型是不可编辑的错误

def printSubs(l,out):
  if (len(l) == 0):
    print(*out)
    return

  printSubs(l[1:],out)
  printSubs(l[1:],out.append(l[0]))
printSubs([15,20,12],[])
这抛出None类型不是iterable错误,但当我将out复制到一个新数组中,然后将l[0]追加到该数组中并将其传递给第二个函数调用时,它工作正常

def printSubs(l,out):
  if (len(l) == 0):
    print(*out)
    return

  printSubs(l[1:],out)
  newOut = [i for i in out]
  newOut.append(l[0])

  printSubs(l[1:],newOut)
printSubs([15,20,12],[])
这段代码运行得很好,有人能解释一下为什么会发生在我身上这两段代码似乎做了相同的事情,因为out数组在不同的函数调用中有不同的状态。提前感谢:)

out.append(l[0])
不会返回任何内容,这就是您在函数中传递的内容。这就是这个错误的原因

而不是-

  printSubs(l[1:],out)
  printSubs(l[1:],out.append(l[0]))
你必须这样做-

  printSubs(l[1:],out)
  out.append(l[0])
  printSubs(l[1:],out)

为什么out.append(l[0])必须返回任何东西本质上我们正在尝试附加l[0]无论out数组的前一个状态是什么。顺便说一句,我们尝试了u建议的方法,错误占上风12 12 20 12 20 12 12 20 12 12 20 12 12 12 12 12 15 12 20 12 12 15 12 20 12 12 20 12 12 12 12 20 12 12 12 12 12 20 12 12 12 12 12 12 20 12 12 12 12 12 12 20 12 12 12 12 12 12 12 12 12 12 12 20 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12使用
printSubs,在第二个参数中,您试图传递将在
.append()
方法之后返回的值。因为它只是附加值,不返回任何内容,所以得到的是NoneType。我希望你明白我想说的话。如果没有,您必须了解append in list是如何工作的。PRINTSUB(l[1]、out.append(l[0])永远不会被命中,因为上一条语句的递归堆栈命中If语句,而没有向out数组追加任何内容,out数组仍然为空。@3xt您能详细说明一下吗,谢谢