在itertools.permutation中防止内存错误

6 python python-itertools

首先,我想提一下,我有一个3 GB的ram.

我正在研究一种在节点上呈时间指数的算法,所以我在代码中就已经有了

perm = list( itertools.permutations(list(graph.Nodes))) # graph.Nodes is a tuple of 1 , 2 , ... n integers
Run Code Online (Sandbox Code Playgroud)

它生成列表中所有顶点的组合,然后我可以处理其中一个排列.

但是,当我运行40个顶点的程序时,它会给出内存错误.

有没有更简单的实现方式,通过它我可以生成顶点的所有组合,没有这个错误.

Céd*_*ien 19

尝试使用由排列生成的迭代器,而不是使用它重新创建列表:

perm_iterator = itertools.permutations(list(graph.Nodes))

for item in perm_iterator:
   do_the_stuff(item)
Run Code Online (Sandbox Code Playgroud)

通过这样做,python将只在内存中保留当前使用的排列,而不是所有的排列(在内存使用方面,它确实更好;))

另一方面,一旦内存问题得到解决,处理所有排列的时间将随着顶点的数量呈指数增长....