組み合わせの数を減らしたいです.
1から520の数字の中から6つの数字の組み合わせをリストとして入 手したいです.
この方法として
①
python
1for u in range(1, 521): 2 list_num.append(u) 3loca_share = [] 4for i in range(len(list_num)): 5 for j in range(i + 1, len(list_num)): 6 for k in range(j + 1, len(list_num)): 7 for s in range(k + 1, len(list_num)): 8 for t in range(s + 1, len(list_num)): 9 for u in range(t + 1, len(list_num)): 10 loca_share.append([list_num[i], list_num[j], list_num[k], list_num[s], list_num[t], list_num[u]]) 11
②
python
1for u in range(1, 521): 2 list_num.append(u) 3 4loca_share=list(itertools.combinations(list_nums,6)
①②の方法を考えたのですが,リストの要素(loca_share)の数が多すぎてパソコンのメモリが不足してしまいます.
リストを分割するなど工夫できることがあれば教えてください.お願いいたします.
質問を再編集し、https://teratail.com/tour を参考にコードをシンタックスハイライト・マークダウンの中に入れて綺麗に表示されるようにしてください。
すみません.これで大丈夫でしょうか.
そもそもなぜそのようなことをやりたいと思ったのかという背景を記載いただくと代替案があるかもしれません
一応正確な組み合わせの数だけ書いておきますね。
520C6なので、520!/(520-6)!/6!という計算になります。つまり。。。
>>> 520 * 519 * 518 * 517 * 516 * 515 / 6 / 5 / 4 / 3 / 2
26675676287260.0
>>>
およそ27兆通りくらいです。
Python内でストリーミングせずに扱うなら27 * [1要素のバイト数]PB 程度の(仮想)メモリは最低限必要です。
ファイルに落とすにしても、そのサイズが入るストレージが必要になります。

回答3件
あなたの回答
tips
プレビュー