我有一个大约有1500个数字(1到1500)的列表,我想从中获取所有可能的置换来进行一些计算,然后从中选择最小的数字。
问题是,您可能会想到的可能性太大了,我的计算机只是冻结了运行代码的过程,因此我必须强制重启。另外我的RAM是8GB,所以应该足够大(?),或者我希望如此。
要限制它,我可以指定一个起点,但这不会减少很多。
这也是一件非常重要的事情,但我感到如此迷失。您认为我应该怎么做才能使其运行?
答案 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)