itertools产品占用太多内存

2024-04-20 02:12:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我只有两个句子,我想产生变量,并计算的levestein距离,但当试图用itertools生成这个列表时,甚至我的64gbram机器都超载了。在

有没有办法限制这种情况,即使我必须把它限制在一定数量的组合中。在

以下是我目前为止的代码:

from __future__ import print_function
import itertools
import sys

in_file = sys.argv[1]
X = []


with open(in_file) as f:
        lis = list(f)
X.append([' '.join(x) for x in itertools.product(*map(set, zip(*map(str.split, lis))))])

for x in X:
        print x

Tags: inimport机器距离map列表forsys
1条回答
网友
1楼 · 发布于 2024-04-20 02:12:38

问题不在于itertools:itertools工作迟缓:它产生iterable。问题是首先要将所有这些元素放入一个列表中。因此,所有的组合必须同时存在。这显然需要比迭代方式更多的内存,因为在后一种情况下,前一个组合的内存可以重用。在

如果要打印所有组合,而不存储它们,则可以使用:

with open(in_file) as f:
        lis = list(f)
for x in itertools.product(*map(set, zip(*map(str.split, lis)))):
    print(' '.join(x))

如果要存储它们,可以使用itertools.islice来限制数量:

^{pr2}$

因此,我们将产品数量限制在1000'000。在

相关问题 更多 >