在Python中以字典顺序生成排列

时间:2017-09-27 00:02:54

标签: python string algorithm permutation

我正在努力解决以下问题,我的代码是否正确以及如何测试它是否有效?

任务:将字符串作为单个输入参数。您可以假设该字符串由不同的小写字母组成(按字母顺序排列)。您可以假设输入是按字母顺序排列的字母串。

返回一个字符串列表,其中每个字符串代表输入字符串的排列。排列列表必须按字典顺序排列。(这基本上是字典使用的顺序。按第一个字母排序(按字母顺序排列),如果平局,则使用第二个字母等。

  • 如果字符串包含单个字符,则返回包含该字符串的列表
  • 为每个字符循环遍历包含要置换字符的字符串的所有字符位置:
  • 删除字符
  • ,形成一个更简单的字符串
  • 递归地生成更简单字符串的所有排列
  • 将删除的字符添加到更简单的每个排列的前面 单词,并将结果排列添加到列表中
  • 返回所有这些新构建的排列

[我的代码]

def perm_gen_lex(in_string):

    if (len(in_string) <= 1):
        return(in_string)

    # List of all new combinations
    empty_list = []

    # All permutations
    final_perm = perm_gen_lex(in_string[1:])

    # Character to be removed
    remove_char = in_string(0)

    # Remaining part of string
    remaining_string = in_string[1:]

    for perm in final_perm[1:]:
        for i in range(len(in_string) + 1):
            return empty_list.append(perm[:i] + remove_char + perm[i:])

    return empty_list

1 个答案:

答案 0 :(得分:-1)

这方面的一些变化会让你感动:

from itertools import product

def combinations(string):
    return [''.join(i) for i in product(string, repeat = len(string))]

print(combinations("abc"))

请参阅https://docs.python.org/3/library/itertools.html#itertools.product