在下面的代码中,我需要返回b,以便我可以在另一个函数中使用它。我尝试过测试以确定是否会返回b
但是当我运行def main
和print(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的子集。 为了澄清,我将能够编写这样的函数,但我首先需要各个子集。
答案 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
。
我怀疑你想要一个不同的结果,但你没有给我们任何关于所谓的代码的指示。