我正在寻找一种克服巨大内存问题的方法。 我有大约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中并为它们分配值。
答案 0 :(得分:2)
是的,直接使用迭代器而不是将其放在列表中。
for c in itertools.product(*all_lists):
print(c) #do something with c
查看product
的文档,您会发现它只是在创建一个迭代器。
如果您想稍后重复使用这些组合,最好再次枚举它们(因此您不必存储它们)。
combination_list = lambda: itertools.product(*all_lists)