在内存管理方面,我在使用itertools permutations时面临很多问题,特别是当列表长度超过10时。
有没有更好的方法为任何列表生成排列,这样内存就不会被充分利用?
下面是我使用它的方法。

     num_list = [i for i in range(0,18)]
     permutation_list = list(permutations(num_list,len(num_list)))

     for p_tuples in permutation_list:
          print(p_tuples)

最佳答案

如果你需要做的只是遍历排列,不要存储它们。直接遍历itertools.permutations返回的对象换句话说,这样做:

permutations = permutations(num_list,len(num_list))
for perm in permutations:
    doSomethingWith(perm)

在迭代器上调用list正是说“同时把所有元素都放在内存中”如果您不想或不需要同时将它们全部存储在内存中,请不要使用list。如果一次只想使用一个元素,只需遍历要遍历的内容。
注意,如果您真的尝试遍历所有的排列,您的代码仍然需要很长时间才能运行,因为18!是一个很大的数字。

09-11 08:28