查找所有可能的固定大小字符串Python

查找所有可能的固定大小字符串Python,python,Python,问题: 我想从36个字符中生成所有可能的组合,这些字符由固定长度字符串中的字母和数字组成。假设术语“固定长度”是字符串长度的上限下面列出了其中一些组合: a b c . . z 0 1 . . 9 . . . aaaaaa aaaaab . . 99999999999999999998 99999999999999999999 // end of the list 我不想将它们存储在内存或磁盘中,因为我对它们进行了计算,如果它们不能达到目标结果,那么,我就不再需要它了。 方法: 1.在第一次尝

问题:
我想从36个字符中生成所有可能的组合,这些字符由固定长度字符串中的字母和数字组成。假设术语“固定长度”是字符串长度的上限
下面列出了其中一些组合:

a
b
c
.
.
z
0
1
.
.
9
.
.
.
aaaaaa
aaaaab
.
.
99999999999999999998
99999999999999999999 // end of the list
我不想将它们存储在内存或磁盘中,因为我对它们进行了计算,如果它们不能达到目标结果,那么,我就不再需要它了。

方法:
1.在第一次尝试中,我选择递归来创建字符串。但是使用记忆太可怕了
2.在第二次尝试中,我使用DFS算法,因为它在使用内存方面几乎是最优的,因为它大约是O(bm)。但从时间角度看,这非常耗时。

有没有其他更优化的方法?

更新
这里是长度为2和3个字符的可能输出:

a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc

不管算法如何,使用递归可能是最简单的方法。不幸的是,你是对的,它可能需要大量的内存来打开每一帧,因为它递归下来。您甚至可能达到递归限制

我会检查继续传球的风格。这是一种优化,允许在执行类似这样的大型递归工作时使用更少的帧。它不会达到递归限制,可能会加快速度。我非常确定Python支持这种优化。这是一个高级主题,所以可能需要一些时间才能完成

您可以使用它。它返回一个固定长度序列的生成器

当您先按长度排序字符串,然后按字典顺序排序时,您可以使用如下内容

import itertools

for l in range(1, 5):
    for seq in itertools.product("abc", repeat=l):
        print("".join(seq))

看看
itertools.compositions\u with\u replacement()。如果我的解释或问题有问题,请告诉我,不要只是点击“无用”箭头!这个工具没有像我预期的那样工作,下面是上面代码的结果:
a b c aa ab ac bb bc cc aab aac abb abb acc bbb bbc bbc bbc aab aab aac aab aac aab aac aab aac aabb abc abc abc abc acc bbc bbc bcc ccc
它缺少“ba”或“aaba”已修复,由于订单关系重大,我们需要使用
itertools.product
。感谢您的帮助,它工作完美,满足了我的需要。顺便问一下,有没有可能缩短执行时间?因为正如我在问题中提到的,我必须检查一些情况,以确定是否接受输出。我能为你做些什么?谢谢,我会查一下的。