#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)