Python itertools.combinations()内存问题

时间:2011-11-24 06:59:51

标签: python combinatorics itertools

我正在处理大量项目组合(来自英雄联盟),大约7200万,所有这些组合都被输入到计算它们有多益处的函数中。

我们正在努力寻找最佳组合。

忽略这样一个事实,即从算法上说,这样做可能有更好的方法,任何人都可以告诉我为什么会出现内存错误?

allpossiblei = itertools.combinations(items.keys(),5)
maxc = 0
i = 0
for combo in allpossiblei:
    icombo = [items[name] for name in combo]
    res, tcost = calcStats(icombo, 0.658,100,100)
    if res > maxc :
        maxc = res
        print str(res) + " " + str(res/tcost)
        print combo
        print float(i)/79208745.0
    if i % 500000 == 0:
        print str(float(i)/79208745.0) + "\n \n"
        gc.collect()
    i = i + 1
除了使用局部变量的算术之外,

calcStats不会做任何事情。

这会快速消耗2gb +内存并在大约5分钟内退出。我以为itertools应该提供一个不会耗尽大量内存的发生器?我甚至投入了gc.collect()语句,但似乎没有用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

组合通过使用提供的整个迭代器来创建池。没有办法解决这个问题。请参阅函数文档中的伪代码:http://docs.python.org/library/itertools.html#itertools.combinations