1

現在、特定の桁数の数字のリストを生成しようとしています。現在のコードは次のとおりです。

| | Python 2.7 |

import itertools

inp = raw_input('Number of digits to write?:')
inp = int(inp)
inp2 = raw_input('File name?:')
inp2 = inp2 + '.txt'
variants = ["".join(item) for item in itertools.product("0123456789", repeat=inp)]

variant = open(inp2, 'w')

for number in variants:
    variant.write("%s\n" % number)

ご覧のとおり、新しい番号ごとに行ごとに出力が配置された複数の異なるファイルを作成しようとしています。

リスト内のすべての可能な数値をメモリに格納しているため、リストが問題になる可能性があることはわかっています。私の質問は次のとおりです。数字が7を超えると、メモリの問題があります.必要なメモリを減らすか、複数のファイルをまとめて同じタイプのデータでリストを生成するにはどうすればよいですか.

for ループは、この特定の itertools 実装を使用せずに、本質的に 2 つのリストを一緒に「追加」します (たとえば、4 桁のファイルと 5 桁のファイルで本質的に 9 桁のファイルを作成します)。

おそらくある種の再帰?(再帰関数などの書き方がまだわかりません。プログラミング全般に関しては初心者です)

4

2 に答える 2

1

リストを作成するvariantsと、すべての文字列がメモリに格納されます。メモリに 10^7 以上の文字列がある場合、文字列が不足し始めるのは理にかなっています。やりたいことは、イテレータを通過して、文字列を 1 つずつ書き出すことです。これは、入力を取得した後に開始されます。

variants = itertools.product('0123456789',repeat=inp)
outfile = open(inp2,'w')
for group in variants:
   outfile.write("%s\n" % (''.join(group)))
于 2015-07-27T18:29:39.757 に答える