我正在编写一个项目,我意识到当我尝试做很长的排列时,我的程序只需要永远运行它。好消息是,我需要的唯一排列是以“#”开头并以“#”结尾的排列。这是我用来收集排列的函数:
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] = '#'
。如果这是一个类似的问题,我道歉,但我如何过滤掉我不需要的字符串,让我的代码实际运行而不是永远。
答案 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) + '#'