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

时间:2018-12-12 14:34:53

标签: python

问题:
我想从固定长度的字符串中由字母和数字组成的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

2 个答案:

答案 0 :(得分:2)

您可以使用itertools.product。它返回固定长度序列的生成器。

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

import itertools

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

答案 1 :(得分:0)

不管算法如何,使用递归可能都是最简单的方法。不幸的是,您是对的,它可能需要大量的内存才能在每帧递归时打开。您甚至可能会达到递归限制。

我会检查Continuation Passing Style。这是一项优化,可以在执行大型递归工作时减少使用帧。它不会达到递归限制,可能会加快速度。我很确定Python支持此优化。这是一个高级主题,因此可能需要一些时间才能完成工作。

http://baruchel.github.io/blog/python/2015/07/10/continuation-passing-style-in-python/