通过排列过滤

时间:2014-03-16 02:55:59

标签: python recursion permutation

我正在编写一个项目,我意识到当我尝试做很长的排列时,我的程序只需要永远运行它。好消息是,我需要的唯一排列是以“#”开头并以“#”结尾的排列。这是我用来收集排列的函数:

def permut(array):
    if len(array) == 1:
        return [array]
    res = []
    for permutation in permut(array[1:]):
        for i in range(len(array)):
            res.append(permutation[:i] + array[0:1] + permutation[i:])
    return res

permut('c#e#')

,我需要的唯一排列是array[0] = '#'array[len(s)-1] = '#'。如果这是一个类似的问题,我道歉,但我如何过滤掉我不需要的字符串,让我的代码实际运行而不是永远。

1 个答案:

答案 0 :(得分:1)

从输入中取出两个#个字符,生成剩下的内容的排列,并在生成的排列的每一端粘贴#个字符。请注意,您很可能仍然过多地排列。

顺便说一句,您不需要编写自己的排列生成器。标准库提供了itertools.permutations,它比您的代码快得多,而且没有代码所带来的一些错误。

import itertools
def hash_on_each_end_permutations(array):
    array = list(array)
    array.remove('#')
    array.remove('#')
    for subpermutation in itertools.permutations(array):
        yield '#' + ''.join(subpermutation) + '#'