python - 将所有组合存储在列表中时如何避免内存错误

标签 python memory combinations python-itertools pulp

我正在从一组数字生成所有组合,然后想要生成这些组合的组合。由于存在大量可能的组合,我不断出现内存错误。我查看了以下问题,但没有一个真正解决了我的问题:
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/

相关文章:

python - 使用 matplotlib 创建自己的颜色图并绘制颜色比例

python - libvirt - 通过 API 确定域使用的卷

python - RefactoringTool : ParseError: bad input: type=22, 值 ='='

c++ - 如何找出我的 Linux 应用程序的内存占用情况?

python - 在 Django 中自动终止长时间运行的请求

Python 将 2GB 的文本文件加载到内存中

PHP 工作代码出现奇怪的问题

linux - 如何连续一行一行地组合两个文件

r - 在不破坏类型的情况下计算组合

c# - 如何洗牌彩球?