【发布时间】:2015-11-28 10:02:37
【问题描述】:
我正在尝试用 Python 编写一个函数,给定一个字符串和一个可选字符,从给定的字符串生成所有可能的字符串。大局是使用此函数最终帮助将 CFG 转换为 chomsky 范式。
例如,给定一个字符串“ASA”和可选字符“A”,我希望能够生成以下数组:
['SA', 'AS', 'S']
因为这些都是可以通过省略原始字符串的一个或两个 A 来生成的所有可能的字符串。
作为参考,我查看了以下问题:generating all possible strings given a grammar rule,但问题似乎略有不同,因为语法规则是在原始字符串中定义的。
这是我对如何解决问题的想法:有一个递归函数,它接受一个字符串和一个可选字符,遍历字符串以找到第一个可选字符,然后创建一个具有第一个可选字符的新字符串省略字符,将其添加到返回数组,并使用刚刚生成的字符串和相同的可选字符再次调用自身。
然后,在所有递归返回后,返回原始字符串并省略第二次出现的可选字符,并重复该过程。
这将一直持续到所有出现的可选字符都被省略为止。
我想知道是否有比使用我刚才描述的逻辑类型更好的方法来做到这一点。
【问题讨论】:
-
但是你有没有尝试过?
-
您的解决方案非常有效。至于另一个,您可能会尝试围绕
itertools模块(组合、排列等)“玩”:首先,找到“可选字符”的所有出现,然后在其索引的所有可能的唯一组合上创建迭代器。 -
谢谢!我能够创建一个类似于我描述的功能。一旦一切都启动并运行,我一定会稍后看看 itertools,看看我是否可以让事情变得更有效率。感谢您提及!