【发布时间】:2016-05-03 02:17:11
【问题描述】:
我正在尝试制作一个递归生成器,但我显然遗漏了一些东西。基本上,我有一个直方图特定维度的正负值列表,并且想要获得正负的每种组合。 例如:
input = [[-1,2],[-3,4],[-5,6]]
而我需要的结果是(虽然我希望它作为生成器而不是列表,但你明白了):
output = [[-1, -3, -5],[-1, -3, 6],[-1, 4, -5],[-1, 4, 6],[2, -3, -5],[2, -3, 6],[2, 4, -5],[2, 4, 6]]
我已经设法完成它,但只能通过将项目附加到我的递归内部的全局列表中,但我真的希望我可以使用生成器来执行此操作并迭代我的函数,因为那样会变得如此之多更清洁的海事组织。
这是我现在拥有的:
def combs(idx,array,current=[]):
for item in array[idx]:
current_copy = current[:]
current_copy.append(item)
if idx + 1 < len(array):
combs(idx+1,array,current_copy)
else:
print current_copy
# yield current_copy
这将完全打印出我想要的内容,但是当我尝试将打印更改为 yield 并循环该函数时,它不起作用。 (例如)
for item in combs(0,input,[]):
print item
【问题讨论】:
-
请避免使用函数名称(在这种情况下为
input)调用变量,这会让您头疼
标签: python recursion generator yield