我有这个程序:
导入itertools导入随机
randomlist = []
for i in range(0,32):
a = random.randint(1,30)
randomlist.append(a)
print(randomlist)
a = randomlist
all_combinations = []
min_num_of_funds = 4
max_num_of_funds = 10
for i in range(0,len(a)+1):
if i>=min_num_of_funds & i<=max_num_of_funds:
comb = list(itertools.combinations(a,i))
all_combinations.append(comb)我得到以下错误
内核已死,正在重新启动
Restarting kernel...
Populating the interactive namespace from numpy and matplotlib
[SpyderKernelApp] WARNING | No such comm: 4b233da0a85511ebb62bacde48001122
[SpyderKernelApp] WARNING | No such comm: 48c21daea86b11ebb62bacde48001122
[SpyderKernelApp] WARNING | No such comm: 61748e76a86c11ebb62bacde48001122
[SpyderKernelApp] WARNING | No such comm: fd9fd78ca86d11ebb62bacde48001122
Kernel died, restarting我的感觉是,问题的根源是列表‘a’可能相对较大。任何解决这个问题的建议都将不胜感激。
发布于 2021-04-29 14:34:40
我认为您应该使用and而不是& (python中的按位and运算符)。
由于较大的i值仍将计算为True,因此内存不足
i = 100
i >= 4 & i <= 10
Out[33]: Truesys.getsizeof(list(itertools.combinations(list(range(32)), 10)))
Out[29]: 572759960 (~572 MB)这已经在内存中了,但由于这个错误,你的程序正在计算更大的i值,这会导致Spyder耗尽内存。
建议如下(适用于我,而不会耗尽内存):
randomlist = []
for i in range(0,32):
a = random.randint(1,30)
randomlist.append(a)
print(randomlist)
a = randomlist
all_combinations = []
min_num_of_funds = 4
max_num_of_funds = 10
for i in range(min_num_of_funds, max_num_of_funds+1):
comb = list(itertools.combinations(a,i))
all_combinations.append(comb)https://stackoverflow.com/questions/67311660
复制相似问题