[英]Recursive Algorithm to generate all permutations of length k of a list in Python
[英]Recursive list building: permutations of all lengths
我在遞歸方面遇到了一些麻煩,尤其是在列表方面。 我不太了解“以遞歸方式建立列表”的過程,因為我不太了解創建列表的位置。 我已經獲得了該程序來打印len(string)
所有排列,但是我想對其進行擴展,以便它也為我提供長度為1到len(string) - 1
的排列。 這是我得到的:
def subset(string):
result = []
if len(string) == 0:
result.append(string)
return result
else:
for i in range(len(string)):
shorterstring = string[ :i] + string[i+1: ]
shortersets = subset(shorterstring)
for s in shortersets:
result.append(string[i] + s)
return result
這使:
print(subset("rum"))
['rum', 'rmu', 'urm', 'umr', 'mru', 'mur']
我不明白為什么當我將result.append(string[i] + s)
更改為result.append(s)
,卻沒有任何輸出。
如果將result.append(string[i] + s)
更改為result.append(s)
,則當len(string) == 0
時,代碼只會將長度為len(string)
排列添加到results
。
為了使您的代碼生成所有排列,最后一個for循環需要為:
for s in shortersets:
result.append(string[i] + s)
result.append(s)
請注意,當與原始代碼一起使用時,您實際上最終會將相同排列的多個實例添加到最終輸出中。 您可以通過將results
set
為list
而不是list
來解決此問題,但您可能希望嘗試重新編寫代碼,以完全避免這種效率低下的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.