如何在python中递归地创建排列列表?

如何在python中递归地创建排列列表?,python,algorithm,list,recursion,permutation,Python,Algorithm,List,Recursion,Permutation,我有一个名为可能性的字典,其中键是一个索引,该键的值是列表中该索引上的值。见下文: possibilities = {0: [None, 'KLAX_1', 'KDEN_1'], 1: [None, 'KLAX_1', 'KDEN_1'], 2: [None, 'KLAX_1', 'KLAS_1', 'KDEN_1'], 3: [None, 'KLAX_1', 'KLAS_1', 'KPHX_1', 'KDEN_1', 'KDFW_1'], 4: [None, 'KPHX_1', 'KD

我有一个名为
可能性
的字典,其中键是一个索引,该键的值是列表中该索引上的值。见下文:

possibilities = {0: [None, 'KLAX_1', 'KDEN_1'],
 1: [None, 'KLAX_1', 'KDEN_1'],
 2: [None, 'KLAX_1', 'KLAS_1', 'KDEN_1'],
 3: [None, 'KLAX_1', 'KLAS_1', 'KPHX_1', 'KDEN_1', 'KDFW_1'],
 4: [None, 'KPHX_1', 'KDEN_2', 'KDFW_2'],
 5: [None, 'KDEN_2', 'KDFW_2'],
 6: [None, 'KDEN_2']}
我想将此列表的每个排列保存在另一个名为
permutations\u list
的列表中。我的目标是根据可能性指令创建这个排列列表。目前我有一个巨大的嵌套for循环来构建它(见下文)但是我想有一个函数,它接受
可能性\u dict
并自动生成我的列表
。我认为递归函数将允许我不指定所需的索引数量

for index_0 in possibilities[0]:
    for index_1 in possibilities[1]:
        for index_2 in possibilities[2]:
            for index_3 in possibilities[3]:
                for index_4 in possibilities[4]:
                    for index_5 in possibilities[5]:
                        for index_6 in possibilities[6]:
                            lst = [index_0,index_1,index_2,index_3,index_4,index_5,
                                  index_6]
                            permutations_list.append(lst)

上面代码的结果是长度为5184的列表。该列表中的每个项目都是一个列表,其中包含所有值的特定排列。这不像使用
itertools.permutations那样简单,因为只有特定的值可以位于列表上的特定索引处。有人能帮我提供一个递归函数吗?谢谢。

经过一些编码,我想出了一个递归解决方案。您可以使用
itertools.product
或以下功能

def rec_permutations(possibilities):
    counter = 0
    permutations_list=[]
    lst=[]
    return rec_permutations_helper(possibilities, permutations_list, counter, lst)

def rec_permutations_helper(possibilities, permutations_list, counter, lst):
    # Base case
    if counter == len(possibilities):
        permutations_list.append(lst)
        return
    # Recursive case
    else:
        locations = possibilities[counter]
        for location in locations:
            new_lst = lst + [location]      
            rec_permutations_helper(possibilities, permutations_list, counter+1, new_lst)

    return permutations_list

对于笛卡尔产品,您需要的只是
itertools.product
。能否提供更详细的回答?请先研究
itertools.product
的功能,如果您仍然不知道如何将其应用于您的问题,请询问有关其用法的具体问题。stackoverflow.com上有很多例子,“但我想递归地做这个。”不,你不想递归地做。你只是还不知道而已。@Azizbro这里有一个例子: