我正在尝试为给定字母表和最大字符串长度的所有可变长度字符串创建一个迭代器/生成器,并按字典顺序排序。
目前,我有一个使用嵌套 itertools product() 的简单方法,然后继续进行排序。这对于小的 max_len_string 非常有用,但对于我的目标使用(大约 max_len_string=32),这使用了太多的临时存储空间而不实用。
有没有办法让这个算法每次迭代只使用少量的常量空间,而不是在排序中破坏整个序列?
from itertools import product
def variable_strings_complete(max_len_string, alphabet=range(2)):
yield from sorted(string
for i in range(1, max_len_string+1)
for string in product(alphabet, repeat=i))
列表(变量字符串完成(3))
[(0,),
(0, 0),
(0, 0, 0),
(0, 0, 1),
(0, 1),
(0, 1, 0),
(0, 1, 1),
(1,),
(1, 0),
(1, 0, 0),
(1, 0, 1),
(1, 1),
(1, 1, 0),
(1, 1, 1)]