Python中使用递归的字符串的所有排列

时间:2016-09-10 18:04:58

标签: python recursion data-structures permutation

我有以下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 个答案:

答案 0 :(得分:0)

如果字符串的长度为1,则只有排列,因此在这种情况下它只返回该字符串。

但是,如果有更多的字母,它会遍历字符串中的每个字母,它们将被视为排列中的第一个字母,在该迭代中out中添加。然后它会遍历字符串其余部分的每个排列,并将每个字符串添加到out,其中let是第一个字母。

但由于permute('aab')不会产生['aab', 'aba', 'baa'];每个条目将在返回的列表中两次。

为避免这种情况,请改用套装。所以out = set()out = {s}out.add(let + perm)代替out = []out = [s]out.append(let + perm)

相关问题