递归python函数的输出

递归python函数的输出,python,recursion,output,Python,Recursion,Output,我有一个函数的问题,它应该返回列表中所有可能的组合,而不重复示例 该函数工作正常,但我无法获得所有组合的列表: abc = ['a','b','c','d','e'] def combi(pre, listg, stage=1,first = 1): if len(listg)==0: return [] start = first lifeat =[] for i in range(start,len(listg)): life

我有一个函数的问题,它应该返回列表中所有可能的组合,而不重复示例

该函数工作正常,但我无法获得所有组合的列表:

abc = ['a','b','c','d','e']

def combi(pre, listg, stage=1,first = 1):
    if len(listg)==0:
        return []
    start = first
    lifeat =[]
    for i in range(start,len(listg)):
        lifeat.append(pre + [listg[i]])
        print('stage: ',stage,'|| ',i,' ',pre + [listg[i]])
        diff = set(listg[i:]) - set(pre+[listg[i]])
        seted= [item for item in listg[i:] if item in diff]
        li = combi(pre+ [listg[i]],seted,stage+1, first= 0)
        #print('li : ',li)
    return lifeat+li


def all_combi(liste):
    return combi([liste[0]], liste)
all_combi(abc)
打印结果:

这是我得到的输出:


提前感谢您的帮助。

您的逻辑有几个问题。我强烈建议您使用增量编程来解决您的困难

  • 假设第一个元素是每个组合的必需成员
  • for
    循环中只追加
    li
    的最后一个值
    lifeat
    应该可以全部获得
  • 对于第二个问题,请将return语句更改为两行:

        lifeat += li
    return lifeat
    
    这会将结果提高到

    [['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'e'],
     ['a', 'b', 'c', 'e'], ['a', 'b', 'd'], ['a', 'b', 'd', 'e'], ['a', 'b', 'e'],
     ['a', 'c'], ['a', 'c', 'd'], ['a', 'c', 'd', 'e'], ['a', 'c', 'e'], ['a', 'd'],
     ['a', 'd', 'e'], ['a', 'e']]
    

    我将把初始化问题留给您。

    在问题中以正确格式的文本显示输出,而不是以图像或外部链接的形式显示。是的,对不起,我认为图片会显示得很清楚。具体的预期输出是什么?是的,太好了!我是如此的分心,是的,为了它的初衷。我不知道如何以渐进的方式做同样的事情。我的第一个版本使用了
    list(itertools.product(*listg))
    ,但它并没有给我所有的组合,问题在于我需要在每个阶段删除一个值。这一个工作得很好,但我很好奇如何处理增量。你说我将把初始化问题留给你是什么意思?@ChrysBltr problem#1没有解决:每个组合都从第一个元素开始,所以你得到的不到一半。。要解决这个问题,您需要从一个空的元素列表开始。我将把“备份一步”修复留给你。这不是问题,也许我应该更好地解释它,但事实上,我正在使用这个函数构建一个机器学习模型,所以我需要尝试各种功能的组合。第一个特性必须始终在组合中。实际上,第一个特征是出发时间,模型预测延误。正如你们可能猜到的,若我不知道什么时候离开,那个么很难预测延迟。这就是为什么我添加了
    first=0
    作为参数。啊——在这种情况下,问题1不是问题。
        lifeat += li
    return lifeat
    
    [['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'e'],
     ['a', 'b', 'c', 'e'], ['a', 'b', 'd'], ['a', 'b', 'd', 'e'], ['a', 'b', 'e'],
     ['a', 'c'], ['a', 'c', 'd'], ['a', 'c', 'd', 'e'], ['a', 'c', 'e'], ['a', 'd'],
     ['a', 'd', 'e'], ['a', 'e']]