Python3:使用itertools.product是否有一种内存有效的方式

时间:2016-07-07 19:45:27

标签: python-3.x

我正在寻找一种克服巨大内存问题的方法。 我有大约100个列表,每个列表平均包含10个元素。 我需要创建所有可能的组合并逐个使用它们(我不需要一次完成)。

目前我的代码如下:

import itertools

l1 = ['a','b','c']
l2 = ['a','b','c']
l3 = ['a','b','c']

all_lists = [l1,l2,l3]
combination_list = [item for item in itertools.product(*all_lists)]

for c in combination_list:
    print(c) #do something with c

遗憾的是,如果我尝试使用10个以上的列表,我会收到内存错误。 知道如何克服内存问题吗?

是否有办法在文件中逐个保存组合并以这种方式访问​​它们?

编辑:我应该说,我需要再次访问这些组合,将它们作为键存储在dict中并为它们分配值。

1 个答案:

答案 0 :(得分:2)

是的,直接使用迭代器而不是将其放在列表中。

for c in itertools.product(*all_lists):
    print(c) #do something with c

查看product的文档,您会发现它只是在创建一个迭代器。

修改

如果您想稍后重复使用这些组合,最好再次枚举它们(因此您不必存储它们)。

combination_list = lambda: itertools.product(*all_lists)