((itertools.combinations)Python Shell挂起的空间大于特定数量的大小,并引发内存错误

问题描述 投票:0回答:1

我正在尝试运行特定的代码以查找来自.in文件的列表的所有可能组合的总和。当使用相对较小的文件运行时,相同的代码可以完美运行,并且使用较大的文件时会挂起,并在抛出少量错误后出现<import itertools file = open("c_medium.in","r") if file.mode=='r': content = file.readlines() maxSlices,numberOfPizza = map(int,content[0].split()) numberOfSlices = tuple(map(int,content[1].split())) print(maxSlices) print(numberOfSlices) sol = [] sumOfSlices = [] for x in range(1,len(numberOfSlices)+1): print(x) for y in itertools.combinations(numberOfSlices,x): if sum(y) <= maxSlices: sumOfSlices.append(sum(y)) sumOfSlices.sort() print(sumOfSlices) checkSum = sumOfSlices[len(sumOfSlices)-1] print(checkSum) found = False if found == False: for x in range(1,len(numberOfSlices)+1): print(x) for y in itertools.combinations(numberOfSlices,x): if found == False: if sum(y) == checkSum: for z in y: sol.append(numberOfSlices.index(z)) found = True solution = tuple(map(str,sol)) print(solution)

我正在尝试运行特定的代码以查找来自.in文件的列表的所有可能组合的总和。当使用较小的文件运行时,相同的代码可以完美运行...
python-3.x out-of-memory combinations itertools
1个回答
0
投票
N的number of combinations随N增长非常快。

特别是关于您的代码,如果(sum(y) <= maxSlices)始终为true,则将生成一个包含2^(numberOfSlices)元素的列表。也就是说,如果numberOfSlices=32,您将溢出32位整数。

© www.soinside.com 2019 - 2024. All rights reserved.