自动字典生成-Python

自动字典生成-Python,python,Python,我试图创建一个程序,它输出长度为n的字符串的所有排列,同时避免定义长度为k的子字符串。例如: 派生所有可能的字符串,长度不超过5个字符,可从初始空集生成,该空集可以指向a或B,但该字符串不能包含不允许的子字符串“AAB” i、 e.[“”]的基本大小写为空集。 字典应该是-A:{A},B:{A,B} 我们可以从空集转到A,也可以转到B。我们不能在A之后转到A B,但可以在A B之后转到A。A和B都可以访问它们自己 示例输出:a、b、aa、bb、ba、aaa、bbb、baa、bba。。。等 我将如

我试图创建一个程序,它输出长度为n的字符串的所有排列,同时避免定义长度为k的子字符串。例如:

派生所有可能的字符串,长度不超过5个字符,可从初始空集生成,该空集可以指向a或B,但该字符串不能包含不允许的子字符串“AAB”

i、 e.
[“”]
的基本大小写为空集。 字典应该是-
A:{A},B:{A,B}

我们可以从空集转到A,也可以转到B。我们不能在A之后转到A B,但可以在A B之后转到A。A和B都可以访问它们自己

示例输出:a、b、aa、bb、ba、aaa、bbb、baa、bba。。。等

我将如何提示用户定义要避免的子字符串,并由此生成遵守这些规则的词典

任何帮助或澄清都将受到极大的欢迎

问候,,
rkhad

itertools模块有一个有用的方法,称为
置换()

(来自)

itertools.置换(iterable[,r])

返回iterable中元素的连续r长度置换

如果未指定r或r为None,则r默认为 生成iterable和所有可能的全长置换

排列按字典排序顺序发出。因此,如果输入 iterable排序后,排列元组将以排序方式生成 秩序

列表理解提供了一种简单的方法来过滤像这样生成的排列,但是要注意,如果您存储的是一个大字符串的排列,那么您将很快得到一个非常大的列表。因此,您可能需要使用
集合
将列表缩减为非重复列表。此外,如果您打算按字典顺序遍历“路径”,您可能会发现函数
sorted
非常有用。最后,当应用于字符串时,中的
操作符检查子字符串(
x in y
检查
x
是否是
y
的子字符串)

我现在也在写正式语言方面的论文。子串成员的概念可以用一个非常简单的正则文法来表示,它对应于一个确定性有限自动机。为了唤起你的记忆:


当你研究这些时,你会发现如果你想让计算在不同的阶段有不同的“字典”,你需要以某种方式跟踪计算的当前“状态”。我鼓励您阅读维基百科的文章,并问我一些后续问题,因为我很乐意帮助您解决这些问题。

我试图在给定字符串集时,能够打印出所有避免给定子字符串的字符串。我必须手动定义字典,就像在我的原始帖子中一样,然后它打印出可能的排列。这不是家庭作业,而是我论文的研究领域。我正在研究一种方法,当给定一个任意的字符串时,我可以建立一个数学生成函数来说明字符串和子字符串之间的关系。它基于Andrew Odlyzko的一个数学prrof。我认为使用字典自动生成一组路径将是一种导出可能字符串的简单方法。我想生成字典,字典将只指向当前状态的可能下一个状态。你明白我的意思吗?谢谢你的帮助。我将研究intertools中的排列方法。我尝试过,但目前我没有足够高的声誉。放心,如果我遇到了难以捉摸的15我会哈哈
>>> from itertools import permutations
>>> perms = [''.join(p) for p in permutations('AAAABBBB', 4)]
>>> len(perms)
1680
>>> len(set(perms))
16
>>> filtered = [p for p in sorted(set(perms)) if 'AB' not in p]
>>> filtered
['AAAA', 'BAAA', 'BBAA', 'BBBA', 'BBBB']