Python 如何获得字符串中所有子字符串的每个排列?

Python 如何获得字符串中所有子字符串的每个排列?,python,string,algorithm,substring,permutation,Python,String,Algorithm,Substring,Permutation,我知道如何获得python中普通字符串的排列: >>> from itertools import permutations >>> perms = [''.join(p) for p in permutations('stack')] >>> print perms ... 但是我怎样才能得到'stac','stak','sack','stck','stc','st',等等的排列呢?我期望的输出是: >>> permut

我知道如何获得python中普通字符串的排列:

>>> from itertools import permutations
>>> perms = [''.join(p) for p in permutations('stack')]
>>> print perms
...
但是我怎样才能得到
'stac'
'stak'
'sack'
'stck'
'stc'
'st'
,等等的排列呢?我期望的输出是:

>>> permutations('pet')
['pet', 'pte', 'ept', 'etp', 'tpe', 'tep', 'pe', 'ep', 'p', 'e', 't', 'pt', 'tp', 'et', 'te']
到目前为止,我所拥有的:

def permutate(values, size):
  return map(lambda p: [values[i] for i in p], permutate_positions(len(values), size))

def permutate_positions(n, size):
  if (n==1):
    return [[n]]
  unique = []
  for p in map(lambda perm: perm[:size], [ p[:i-1] + [n-1] + p[i-1:] for p in permutate_positions(n-1, size) for i in range(1, n+1) ]):
    if p not in unique:
      unique.append(p)
  return unique

def perm(word):
  all = []
  for k in range(1, len(word)+1):
     all.append(permutate([' ']+list(word), k))
  return all
其运行方式如下:

>>> perm('pet')
[[['t'], ['e'], ['p']], [['t', 'e'], ['e', 't'], ['e', 'p'], ['t', 'p'], ['p', 't'], ['p', 'e'], ['p', 'p']], [['t', 'e', 'p'], ['e', 't', 'p'], ['e', 'p', 't'], ['e', 'p', 'p'], ['t', 'p', 'e'], ['p', 't', 'e'], ['p', 'e', 't'], ['p', 'e', 'p'], ['t', 'p', 'p'], ['p', 't', 'p'], ['p', 'p', 't'], ['p', 'p', 'e']]]
>>> 
然而,它有一系列的列表,并且具有像['p','p','t']这样的值


我该怎么做?感谢您的帮助。

这是一种使用以下工具的方法:

输出:

['p', 'e', 't', 'pe', 'pt', 'ep', 'et', 'tp', 'te', 'pet', 'pte', 'ept', 'etp', 'tpe', 'tep']

这个网站上有几个这样的例子。试试看。你的意思是“一个字符串的所有子串的每一个排列”,顺便问一下,我们应该假设字母是不同的,这样你就不需要考虑重复子串了吗?(想想“评估”)。
['p', 'e', 't', 'pe', 'pt', 'ep', 'et', 'tp', 'te', 'pet', 'pte', 'ept', 'etp', 'tpe', 'tep']