簡體   English   中英

使用遞歸的 Python 中字符串的所有排列

[英]All Permutations of a String in Python using Recursion

我有以下 Python 代碼,它使用遞歸返回給定字符串的所有排列的列表。 我盡我最大的努力去理解代碼的工作,但我沒能做到。 任何人都可以給我下面提到的代碼的細分嗎?

def permute(s):
    out = []

    # Base Case
    if len(s) == 1:
        out = [s]

    else:
       # For every letter in string
       for i, let in enumerate(s):
           for perm in permute(s[:i] + s[i+1:]):
                # Add it to output
                out += [let + perm]
    return out

permute('abc')
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

如果字符串的長度為 1,則只有置換,因此在這種情況下它僅返回該字符串。

如果有更多的字母,但是,它通過在字符串中的每一個字母,它們均視為在得到中添加的排列的第一個字母out在迭代。 然后它遍歷字符串其余部分的每個排列,並將每個排列添加到outlet是第一個字母。

但是作為permute('aab')不會產生['aab', 'aba', 'baa'] ; 每個條目將在返回的列表中出現兩次。

為避免這種情況,請改用集合。 所以out = set()out = {s}out.add(let + perm)而不是out = []out = [s]out.append(let + perm)

暫無
暫無

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

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