我正在从一组数字生成所有组合,然后想要生成这些组合的组合。由于存在大量可能的组合,我不断出现内存错误。我查看了以下问题,但没有一个真正解决了我的问题:
Creating all combinations of a set and running out of memory
Python itertools.combinations() memory problems
Python list memory error
我使用以下方法生成列表:
#generate all combinations of 1 and 0 of size 30
set_1 = itertools.product([0,1], repeat = 30)
#generate all combinations of set 1, of size 5
set_2 = [tuple(c) for c in pulp.allcombinations(set_1, 5)]
for sets in set_2:
print(sets)
生成set_2时发生内存错误。我仍然希望能够迭代 set_2,因为稍后我需要访问这些集合。我考虑过将这些集合写入 txt 文件,但我想将其保存为最后的手段。
最佳答案
您可以使用生成器表达式来存储 set2
并节省内存,而不是使用在内存中创建列表的列表理解:
set_2 = (tuple(c) for c in pulp.allcombinations(set_1, 5))
生成器类似于列表理解,只不过它们不会将值存储在内存中,而只是根据需要生成值。但它们是一次性迭代器,您不能像列表理解的结果一样再次迭代它们。
关于python - 将所有组合存储在列表中时如何避免内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432671/