Python 有没有办法生成可能的简短形式?
考虑字符串Python 有没有办法生成可能的简短形式?,python,Python,考虑字符串Building center。如果要求将其缩写以适合特定数量的字符,您和我可以选择非常不同但同样有效的表示形式。例如,三种有效的7个字符表示法是: BLD CNT BLD CTR BLDNGCT 这些数据由以下内容生成: 仅使用字符串中的现有字母(不能使用z缩写) 按照它们出现的顺序使用它们(LBD无效,因为在建筑中L不在B之前) 最多可选择所示数量的字符(包括空格) 我想写一个基于搜索广度或深度的算法,为给定的字符串和所需的长度生成所有这样的简短形式 在开始编写脚本之前,我想知道是
Building center
。如果要求将其缩写以适合特定数量的字符,您和我可以选择非常不同但同样有效的表示形式。例如,三种有效的7个字符表示法是:
BLD CNT
BLD CTR
BLDNGCT
这些数据由以下内容生成:
LBD
无效,因为在建筑中L不在B之前)
在开始编写脚本之前,我想知道是否已经实现了类似的功能。如果没有,你会建议我怎么写这样的东西?除了
itertools
,还有什么有用的库吗?是的,这可以通过itertools
完成:
import itertools
text = 'Building Centre'
length = 7
shorts = [''.join(short) for short in itertools.combinations(text, length)]
print(shorts) # 6435 different versions!
请注意,itertools.compositions
确实保留了顺序。你想退房吗
编辑
如果还允许使用长度小于字符的短格式,则可以使用
shorts = list(itertools.chain(*((''.join(short) for short in itertools.combinations(text, l))
for l in range(1, length + 1))))
如评论中所述,一些简短的表单会生成两次。要解决此问题,请使用例如shorts=list(set(shorts))
这听起来不像是BFS/DFS问题,对我来说,这听起来更像是在itertools中为x查找字符串的所有特定长度的(有序)子序列。组合(“Building Center”,7):打印。除了itertools
-为什么从一组可能的答案中省略了itertools
?“中心”
是否是“同等有效的表述”之一?似乎如果你想要合理的缩写,那么你需要添加更多的约束。如果这不是家庭作业,而是你真的想自动生成合理的缩写,这看起来很有希望:“选择尽可能多的字符…”——那么你不应该循环使用范围(1+长度)
?还有--BDE
(例如)可能会生成两次,但可能不会返回两次。也许先通过set()
运行shorts
。啊!看,我用的是排列而不是组合。非常感谢。