итераторы сбоя spyder.комбинации

#python #spyder #combinatorics

Вопрос:

У меня есть эта программа:

импорт итерационных инструментов импорт случайных

 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 amp; 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
 

У меня такое чувство, что источником проблемы является список «а», который может быть относительно большим. Любые предложения по решению этой проблемы будут оценены с благодарностью.

Комментарии:

1. Не используйте amp; в логических выражениях. Воспользуйся and . Они не одно и то же.

Ответ №1:

Я думаю, вы захотите использовать and вместо amp; (побитовое и оператор в python).

У вас заканчивается память, потому что большие значения i все равно будут оцениваться в True :

 i = 100

i >= 4 amp; i <= 10
Out[33]: True
 
 sys.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)