目的
你说的是组合,但是组合在语义上是无序的,你的意思是,你想要找到所有有序排列的交集,这些排列由空格连接到一个目标列表。在
首先,我们需要导入要使用的库。在import re
import itertools
拆分字符串
不要分割字符,你是在做一个语义搜索,除了奇怪的字符。
由re模块支持的正则表达式非常适合于此。生的
Python字符串,r'',我们使用正则表达式来表示单词的边缘,\b,在任何字母数字字符(和_)周围,\w,数字大于或等于1,+。在
re.findall返回每个匹配项的列表。在
^{pr2}$
这里,单词是我们的单词表:>>> print words
['alpha', 'beta', 'charlie', 'delta', 'epsilon', 'foxtrot']
创造排列
继续,我们更喜欢使用生成器操作数据,以避免在需要数据之前不必要地具体化数据,并在内存中保存大型数据集。itertools库有一些很好的函数,它们非常适合我们提供上述单词的所有排列,并将它们链接到单个iterable中:_gen = (itertools.permutations(words, i + 1) for i in xrange(len(words)))
all_permutations_gen = itertools.chain(*_gen)
用list(all_permutations_gen)列出所有的排列可以得到: