【问题标题】:All Permutations of a String in Python using RecursionPython中使用递归的字符串的所有排列
【发布时间】:2017-01-18 15:16:28
【问题描述】:

我有以下 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']

【问题讨论】:

    标签: python recursion data-structures permutation


    【解决方案1】:

    如果字符串的长度为1,则只有on排列,所以在这种情况下它只返回那个字符串。

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

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

    为避免这种情况,请改用集合。所以out = set()out = {s}out.add(let + perm) 而不是out = []out = [s]out.append(let + perm)

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 2017-02-17
      • 1970-01-01
      • 2016-04-06
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多