Вы пытаетесь найти все комбинации 0 и 1 для п термина. Общее количество таких комбинаций будет 2**n
. Для n=30
общее количество таких комбинаций: 1073741824
. Огромного нет?
Для того, чтобы избавиться от ошибки памяти, вы должны использовать generator, которые динамически сочетают комбинации, а не сохраняя их как список. Кроме того, поскольку это комбинация только 0s и 1s. Почему бы не печатать двоичные числа от 0
до '1'*n
?
Ниже итератор для достижения этой цели, как:
def binary_combinations(num):
my_binary_string = '1'*num
my_int_num = int(my_binary_string, 2)
format_string = '{'+':0{}b'.format(num)+'}'
for i in xrange(my_int_num):
yield format_string.format(i)
else:
raise StopIteration('End of Memory Issue!')
Чтобы выполнить это, сделайте следующее:
>>> for i in binary_combinations(3):
... print i
...
000
001
010
011
100
101
110
Здесь n = 3
. Теперь вы можете использовать его с n = 30, 40, .. или любым, что вы хотите;)
Мне нужен список списков, и в любом случае это не работает на моем компьютере MemoryError для больших n. – Chicony
Какова цель? Если вам не нужны все значения сразу, почему бы просто не сохранить итератор, а не «сопоставить» с списками? –
В чем проблема? Ошибка памяти? Пожалуйста, укажите вывод ошибки – tuergeist