-1

以下のリストを作成したいと思います。

L = list(itertools.product('...', repeat=8))

呼び出し

itertools.product(...)

は長さ 8 の約 1'099'511'627'776 要素を生成します (私はそれが大きな数であることを知っています) が、私のシステムには 12 ギガビットの RAM があるため、問題にはなりませんよね?

各プロセスに制限がある可能性はありますか?で確認しました

ulimit -a 

そしてその

max memory size

無制限に設定されている...

4

2 に答える 2

4

1,099,511,627,776*8は8テラバイトです。8テラバイト>12ギガバイト。

すべてを評価してリストに格納することを強制せずに、イテレータを直接使用してこれを処理することを検討してください。

もちろん、1兆個の要素を処理するのは簡単ではないので、おそらく長い時間がかかります。

于 2013-01-16T10:55:47.140 に答える
0

データを次々と処理することは問題にならないはずですが、すべてを収集することは問題になる可能性があります。

あなたが持っている場合

prod = itertools.product('...', repeat=8)

このオブジェクトを反復処理できます

for item in prod:
    # process item and drop it afterwards

必要な量のメモリのみを消費します。しかし、

L = list(prod)

すべてのオブジェクトが取得され、使用され、リストに追加されます。これはかなり長くなるかもしれません...

于 2013-01-16T11:02:59.967 に答える