Kor*_*baş 1 python python-itertools python-3.x
我有 6 个不同范围的变量。我想用我的代码创建可能性池。在这个例子中,我为每个变量提供了 10 个范围,但我必须给它们大约 200 个范围。但是每当我试图超过 20 个范围(例如 30 个范围)时,Python 都会杀死自己,有时它会冻结计算机。有没有办法让它更快更稳定?
谢谢。
import itertools
a = [x for x in range(400,411)]
b = [x for x in range(400,411)]
c = [x for x in range(400,411)]
d = [x for x in range(400,411)]
e = [x for x in range(400,411)]
f = [x for x in range(400,411)]
fl = lambda x: x
it = filter(fl, itertools.product(a,b,c,d,e,f))
posslist = [x for x in it]
print(len(posslist))
Run Code Online (Sandbox Code Playgroud)
有 6 个列表,每个列表包含 11 个元素:[400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410].
6 个这样的列表的笛卡尔积是 11 个6元组的列表,每个元组有 6 个整数(第一个元组是:)(400, 400, 400, 400, 400, 400)。
在 64 位 Python * 中,每个元组的大小为 6*8 字节。
所以总大小posslist是 6 * 8 * 11 6 = 81 GB!
你有足够的内存吗?可能不会,因此操作系统将开始交换 RAM,这非常慢。因此,除了计算 81 GB 的数据外,计算机还必须不断地将数据从 RAM 交换到 HDD 并返回,因此它的工作速度会更慢。
* 请注意,虽然它是 32 位 Python 的一半大小,但 32 位 Python 根本无法寻址足够的内存