我正在做一个关于第一个元素固定的递归排列的练习。我需要在每次排列(果1果2果3果4果5)后以特定格式打印,第一个元素始终相同。我找不到这个特定排列问题的答案,因此,我用一个新问题来问它。我试着用两种可选的方法来解决这个问题,但是,第一种方法不断地向同一个结果列表中添加元素,而另一种方法会导致typeError。什么是错误的,需要什么来修复代码。 注意:我可以用itertools.permutations完成;或与所有元素排列;或者先用四个元素进行打印,然后在打印时添加第一个元素; 在这里我要问的是,这个特殊的功能需要如何纠正
fruits = ["Apple", "Banana", "Orange", "Peach", "Avocado"]
def permutation(menu, lst):
if len(lst) == 0:
#here prints of each permutation
print(' '.join([fruits[i] for i in menu]))
return []
##the first try which gives the permutations
##as ever expanding list
for i in range(len(lst)):
fruit = lst[i]
menu.append(fruit)
remLst = lst[:i] + lst[i+1:]
permutation(menu, remLst)
##the second option which gives TypeError:
##can only concatenate list (not "int") to list
##this is alternative to the one above NOT in the same function
for i in range(len(lst)):
fruit = lst[i]
remLst = lst[:i] + lst[i+1:]
for p in permutation(menu, remLst):
menu.append([fruit] + p)
return menu
permutation([0], list(range(1, len(fruits))))
您可以删除固定元素,然后在其余元素上创建置换,并将固定元素添加到结果中,如下所示:
结果将是:
如果要在不使用
itertools
的情况下创建递归函数,可以按如下方式执行:这将返回:
但它适用于任意长前缀,如:
相关问题 更多 >
编程相关推荐