辞書順でソートされた、アルファベットと最大文字列長を指定して、すべての可変長文字列のイテレータ/ジェネレータを作成しようとしています。
現在、ネストされた 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))
list(variable_strings_complete(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)]