簡體   English   中英

遞歸列表構建:所有長度的排列

[英]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 setlist而不是list來解決此問題,但您可能希望嘗試重新編寫代碼,以完全避免這種效率低下的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM