gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:42 25 4
gpt4 key购买 nike

我有一个名为 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 或以下函数。

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

关于python - 如何在 python 中递归创建排列列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com