-1

我想生成以下列表:

L = list(itertools.product('...', repeat=8))

通话

itertools.product(...)

生成大约 1'099'511'627'776 个长度为 8 的元素(我知道这是一个很大的数字),但我的系统有 12Gbit RAM,因此它应该不是问题,对吧?

每个过程是否有可能有限制?我检查过

ulimit -a 

max memory size

设置为无限...

4

2 回答 2

4

1,099,511,627,776 * 8 是 8 TB。8 TB > 12 GB。

您可以考虑直接使用迭代器来处理它,而不是强制它全部被评估并存储在一个列表中。

当然,任何不平凡的处理 1 万亿个元素都可能需要很长时间。

于 2013-01-16T10:55:47.140 回答
0

一个接一个地处理数据应该不是问题,但收集它们可能是个问题。

如果你有

prod = itertools.product('...', repeat=8)

你可以迭代这个对象

for item in prod:
    # process item and drop it afterwards

这只会消耗所需的内存量。但随着

L = list(prod)

所有对象都将被使用并放入列表中。这可能会很长...

于 2013-01-16T11:02:59.967 回答