Python代码适用于打印但不返回

时间:2014-03-01 18:13:17

标签: python

在下面的代码中,我需要返回b,以便我可以在另一个函数中使用它。我尝试过测试以确定是否会返回b但是当我运行def mainprint(n_boxes)时,它会给我None。但是,如果我将return b更改为print(b)而将print(n_boxes)更改为n-boxes,则会获得正确的输出。

  def subsets(a, b, lo):
    hi = len(a)
    subs_2 = []
    if (lo == hi):
      return b
    else:
      c = b[:]
      b.append(a[lo])
      subsets (a, c, lo + 1)
      subsets (a, b, lo + 1)
  def main():
    boxes = [[1, 2, 3], [4, 5,6], [6, 6, 9], [3, 8, 4]]
    b = []
    n_boxes = subsets(boxes, b, 0)
    print(n_boxes)
  main()

我不确定我做错了什么。我需要b的值。谢谢!

好的,所以我希望返回所有可能的子集。 “def子集”可以做到这一点。 使用“print b”,我的输出是

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

我希望能够单独使用上述子集。所以我试图找到一种方法来返回子集,并能够编写一个函数,给出长度为2的子集。 为了澄清,我将能够编写这样的函数,但我首先需要各个子集。

1 个答案:

答案 0 :(得分:0)

您正在递归地调用subsets,但不会在else:分支中返回任何内容。

对于if (lo == hi):分支,您返回b,但如果lo != hi您根本没有返回任何内容,因此返回值为None,则为默认值。如果您想为该分支返回一些内容,则还需要在其中添加return语句。

因为b就地改变了,或许您只想打印b?在这种情况下,您无需返回任何内容:

def subsets(a, b, lo):
    hi = len(a)
    subs_2 = []
    if lo != hi:
        c = b[:]
        b.append(a[lo])
        subsets (a, c, lo + 1)
        subsets (a, b, lo + 1)

def main():
    boxes = [[1, 2, 3], [4, 5,6], [6, 6, 9], [3, 8, 4]]
    b = []
    subsets(boxes, b, 0)
    print(b)

main()

请注意,代码完全忽略subs_2,您也可以删除该行。 {I}也会被忽略,因为递归调用会改变c。上述代码会将boxes中的所有子列表重置为b

怀疑你想要一个不同的结果,但你没有给我们任何关于所谓的代码的指示。