无尽的排列和RAM

时间:2019-05-09 22:02:16

标签: python list data-science

我有一个大约有1500个数字(1到1500)的列表,我想从中获取所有可能的置换来进行一些计算,然后从中选择最小的数字。

问题是,您可能会想到的可能性太大了,我的计算机只是冻结了运行代码的过程,因此我必须强制重启。另外我的RAM是8GB,所以应该足够大(?),或者我希望如此。

要限制它,我可以指定一个起点,但这不会减少很多。

这也是一件非常重要的事情,但我感到如此迷失。您认为我应该怎么做才能使其运行?

1 个答案:

答案 0 :(得分:0)

使用生成器和itertools可以节省大量内存。生成器就像列表一样,除了新元素是一一生成而不是存储在内存中之外。即使您的问题有更好的解决方案,掌握生成器也会帮助您将来节省内存。

Python 3中的注释map已经是生成器(而对于Python 2,请使用imap而不是map

import itertools


array = [ 1, 2, ... , 1500] # or other numbers
f = sum   # or whatever function you have


def fmax_on_perms(array, f): 
    perms = itertools.permutations(array) # generator of all the 
           permutations rather than static list
    fvalues = map(my_function, perms) # generator of values of your   function on different permutations
    return max(fvalues)