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
提取一个易于管理的数字 list
ify:
first10000subsets = list(itertools.islice(prod(valset, repeat=10), 10000))
我有一个脚本如下:
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
提取一个易于管理的数字 list
ify:
first10000subsets = list(itertools.islice(prod(valset, repeat=10), 10000))