考虑字符串Building Centre
。如果要求将其缩写为适合特定数量的字符,您和我可以选择非常不同但同样有效的表示。例如,三个有效的7个字符表示形式为:
BLD CNT
BLD CTR
BLDNGCT
这些是由:
生成的LBD
无效,因为L不会出现在Building
中的B之前。我希望编写一个基于搜索的广度或深度算法来生成给定字符串和所需长度的所有此类简短形式。
在我编写脚本之前,我想知道是否已经实现了类似的东西。如果没有,你会怎么建议我写这样的东西?除itertools
之外,还有任何有用的库吗?
答案 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))
。