您正在尝试生成一个包含2^40(即超过1万亿)个列表的列表,每个列表包含40个整数元素。自从Python
int
s的长度为24字节,即使在最基本的假设下(不计算列表开销等),这也需要960 TB的RAM。
解决办法是
不
要尝试将生成器转换为列表并直接使用生成器,请执行以下操作:
>>> 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)
...
问题是你做不到
len(l)
(但你已经知道结果了,不是吗?)而且你不能切。