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