首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spyder crash itertools.combinations

spyder crash itertools.combinations
EN

Stack Overflow用户
提问于 2021-04-29 13:49:56
回答 1查看 50关注 0票数 1

我有这个程序:

导入itertools导入随机

代码语言:javascript
复制
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)

我得到以下错误

内核已死,正在重新启动

代码语言:javascript
复制
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’可能相对较大。任何解决这个问题的建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-29 14:34:40

我认为您应该使用and而不是& (python中的按位and运算符)。

由于较大的i值仍将计算为True,因此内存不足

代码语言:javascript
复制
i = 100

i >= 4 & i <= 10
Out[33]: True
代码语言:javascript
复制
sys.getsizeof(list(itertools.combinations(list(range(32)), 10)))
Out[29]: 572759960 (~572 MB)

这已经在内存中了,但由于这个错误,你的程序正在计算更大的i值,这会导致Spyder耗尽内存。

建议如下(适用于我,而不会耗尽内存):

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67311660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档