与itertools.product的每次迭代交互

时间:2014-11-26 23:08:27

标签: python python-2.7 itertools

我使用product python库中的itertools方法来计算列表列表中项目的所有排列。举个例子:

>> elems = [[1,2],[4,5],[7,8]]
>> permutations = list(itertools.product(*elems))
>> print permutations
# this prints [(1, 4, 7), (1, 4, 8), (1, 5, 7), (1, 5, 8), (2, 4, 7), (2, 4, 8), (2, 5, 7), (2, 5, 8)]

如何在计算每个排列时检查每个排列,而不是一次返回整组排列?我目前面临的问题是我在运行脚本时遇到python Memory Error,因为生成了太多的排列。我只关心一个排列。如果我可以检查生成的每个排列,我只能存储一个值而不是存储每个可能的排列。这是可能的,如果是这样,我将如何实现这个?

1 个答案:

答案 0 :(得分:2)

您可以在for循环中执行此操作,一次一个:

for a_perm in itertools.product(*elems):
    print(a_perm)

itertools.product()为您提供迭代器,您可以一次迭代一个项目。