Python 太大 itertools.product

Too big itertools.product in Python

我有一个脚本如下:

set=[0,1]
sub=prod(set,repeat=10)
subset = [item for item in sub]

其中,子集包含集合的10个元素组合。

当我将重复次数从 10 更改为 500 时,无法看到子集!我该如何处理这个问题?

我猜它变成了 RAM 入侵者!

这不是您制作的子集,它只是制作 product 中所有值的 list。一次请求所有这些相当于 运行 从 0 到 2 ** 500 的计数器,如果不清楚,即使在 low-level 上也需要大约 "heat death of the universe" 时间, 接近金属语言。 Written out, you'd have 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376 different outputs.

你不可能一次实现所有的价值,更不用说了。如果你想看到其中的一些,你可以迭代 product 并打印:

valset = [0, 1]  # Don't name a variable set, it shadows the built-in set

for subset in prod(valset, repeat=10):
    print(subset)  # Be prepared to Ctrl-C this, it will never end on its own

或使用 itertools.islice 提取一个易于管理的数字 listify:

first10000subsets = list(itertools.islice(prod(valset, repeat=10), 10000))