有没有办法生成可能的简短形式?

时间:2017-01-09 21:52:36

标签: python

考虑字符串Building Centre。如果要求将其缩写为适合特定数量的字符,您和我可以选择非常不同但同样有效的表示。例如,三个有效的7个字符表示形式为:

BLD CNT

BLD CTR

BLDNGCT

这些是由:

生成的
  1. 仅使用字符串中的现有字母(不能使用z缩写)
  2. 按照它们出现的顺序使用它们(LBD无效,因为L不会出现在Building中的B之前。
  3. 最多选择所示数量的字符(包括空格)。
  4. 我希望编写一个基于搜索的广度或深度算法来生成给定字符串和所需长度的所有此类简短形式。

    在我编写脚本之前,我想知道是否已经实现了类似的东西。如果没有,你会怎么建议我写这样的东西?除itertools之外,还有任何有用的库吗?

1 个答案:

答案 0 :(得分:2)

是的,这可以通过itertools完美地完成:

import itertools

text = 'Building Centre'
length = 7
shorts = [''.join(short) for short in itertools.combinations(text, length)]
print(shorts)  # 6435 different versions!

请注意itertools.combinations确实保留了订单。您想查看the docs

修改

如果还允许使用少于length个字符的短表单,则可以使用

shorts = list(itertools.chain(*((''.join(short) for short in itertools.combinations(text, l))
                                for l in range(1, length + 1))))

如评论中所述,一些简短形式会产生两次。要解决此问题,请使用例如shorts = list(set(shorts))