2017-10-25 31 views
0

他の3つのリストのすべての組み合わせでリストを作成したいと思います。 xlijst2には355項目、ylijst2には35項目、zlijst2には420項目があります。これは私のコードです:すべての組み合わせを含むリストのPythonリストmemoryerror

alles = [xlijst2, ylijst2, zlijst2] 
lijstje = list(itertools.product(*alles)) 

実行すると、私はMemoryErrorを取得します。いくつかの回避策がありますか?

+0

文字通り、これらの組み合わせをすべて保存するためにメモリが不足していると思います。期待している順列の数を計算しましたか? –

+2

うん。それをリストにしないでください。 –

+0

あなたは何をしようとしていますか?リストを作成せずにそれを行うことはできますか? –

答えて

3

はい、この問題を回避するには、明示的なリストにそれをキャストせずに、generatoritertoolsそのリターンを使用することです:

lijstje = itertools.product(*alles) 

そこから、あなたが組み合わせ一つ一つを反復処理することができます。

for elt in lijstje: 
    ...do something() 
+0

これも機能します!そして私はそれが少し速いと思う。あれは正しいですか? – Joost

+0

これと私の答えは、同じことに沸きます。これは 'itertools.product'の結果をリストにキャストしていません。私の答えは、あなたが結果を見ることを望んだと仮定します。その場合、ファイルが唯一正しい方法です。 – Shadow

1

ウェイこれはRAMに収まるほど多くの結果があります。ファイルに書き込む必要があります。私はあなたに警告する必要があります - これは少数のアイテムになることはありません。

with open("values.txt", "w") as f: 
    for value in itertools.product(*alles): 
     f.write(", ".join(value) + "\n") 
+0

これは機能します。ありがとう! – Joost

+0

問題はありません:)好奇心のために、そのファイルにいくつの行がありますか? – Shadow

+0

5.218.500行(ファイルサイズは154メガバイト)になりました。 – Joost

関連する問題