我正在尝试生成N = 40的所有可能的二进制数,因此我使用了以下代码:
l = list(itertools.product([0, 1], repeat=40))
但是我遇到了一个内存问题,该进程被终止,并且我使用的是功能强大的计算机,具有64GB RAM,因此有解决此问题的方法吗?
您正在尝试生成2 ^ 40(即超过1万亿个)列表,每个列表包含40个整数元素。即使使用最基本的假设(不计算列表开销等),也需要960 TB的RAM。
解决方案是not,尝试将生成器转换为列表并直接使用生成器:
>>> l = itertools.product([0, 1], repeat=40)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0)
...