【发布时间】:2020-02-06 07:10:08
【问题描述】:
我有一个名为possibilities 的字典,其中键是索引,该键的值是可以位于列表中该索引上的值。见下文:
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_list 的列表中。我的目标是从可能性字典创建这个 permutations_list。目前我有一个巨大的嵌套 for 循环来构建它(见下文)。 但我希望有一个函数可以接收possibilities_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 的列表permutations_list。该列表中的每个项目都是一个列表,其中包含所有值的特定排列。这不像使用itertools.permutations 那样简单,因为只有特定值才能位于列表中的特定索引处。任何人都可以帮助提供递归函数吗?谢谢。
【问题讨论】:
-
您需要的只是
itertools.product的笛卡尔积。 -
能否提供更详细的回复?
-
请先研究
itertools.product的作用,如果您仍然不明白如何将其应用于您的问题,请询问有关其用法的具体问题。 stackoverflow.com 上有很多示例。 -
“但我想递归地执行此操作。”不,您不想递归地执行此操作。你只是还不知道。
-
@Azizbro 这是一个例子:stackoverflow.com/questions/3034014/…
标签: python algorithm list recursion permutation