在内存管理方面,我在使用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!是一个很大的数字。