我想生成以下列表:
L = list(itertools.product('...', repeat=8))
通话
itertools.product(...)
生成大约 1'099'511'627'776 个长度为 8 的元素(我知道这是一个很大的数字),但我的系统有 12Gbit RAM,因此它应该不是问题,对吧?
每个过程是否有可能有限制?我检查过
ulimit -a
和
max memory size
设置为无限...
1,099,511,627,776 * 8 是 8 TB。8 TB > 12 GB。
您可以考虑直接使用迭代器来处理它,而不是强制它全部被评估并存储在一个列表中。
当然,任何不平凡的处理 1 万亿个元素都可能需要很长时间。
一个接一个地处理数据应该不是问题,但收集它们可能是个问题。
如果你有
prod = itertools.product('...', repeat=8)
你可以迭代这个对象
for item in prod:
# process item and drop it afterwards
这只会消耗所需的内存量。但随着
L = list(prod)
所有对象都将被使用并放入列表中。这可能会很长...