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

2024-10-17 08:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

BLD CNT

BLD CTR

BLDNGCT

它们是通过以下方式生成的:

  1. 仅使用字符串中的现有字母(不能使用z缩写)
  2. 按它们出现的顺序使用它们(LBD是无效的,因为在Building中L不在B之前)。你知道吗
  3. 最多可选择指定数量的字符(包括空格)。你知道吗

我想写一个基于广度或深度搜索的算法,为给定的字符串和所需的长度生成所有这样的简短形式。你知道吗

在开始编写脚本之前,我想知道是否已经实现了类似的功能。如果不是,你建议我怎么写这样的东西?除了itertools,还有什么有用的库吗?你知道吗


Tags: 字符串数量顺序字母方式字符形式表示法
1条回答
网友
1楼 · 发布于 2024-10-17 08:21:09

是的,这可以用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))。你知道吗

相关问题 更多 >