Перебор всех комбинаций двоичного массива без сохранения значений массива python

#python #arrays #storage #combinations

#python #массивы #Хранение #комбинации

Вопрос:

Я пытаюсь перебрать все комбинации двоичного массива (например [0,0,0,0], [0,0,0,1], [0,0,1,0],[0,0,1,1], … [1,1,1,1]) без создания списка, содержащего все комбинации, поскольку двоичный массив содержит более 40 элементов (таким образом, более 2 ^ 40 комбинаций).

Что я сейчас делаю:

 for i in range(2**(len(binaryArray))):
        b = decimal_in_binary_array(i, len(binaryArray))
        #do sth with b
 

Это работает нормально, но преобразование десятичного значения в двоичный массив требует времени.

 def decimal_in_binary_array(decimal, array_length):
    a = [int(x) for x in bin(decimal)[2:]]
    a = [0]*(array_length-len(a))   a
    return a
 

Я уже пробовал использовать

  1. itertools.permutations
  2. multiset_permutations из scypy

Однако itertools не распознает одинаковые значения. И для обеих версий мне сначала нужно сгенерировать список со всеми комбинациями, что невозможно для такого большого количества комбинаций.

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

1. Здравствуйте, просто чтобы уточнить, ваш код работает нормально, но вы хотели бы знать, есть ли лучший способ сделать это с помощью itertools.permutations or multiset_permutations ?

2. Вы можете использовать рекурсию.

3. Я хотел бы ускорить код, поэтому я хочу избежать преобразования десятичного числа в двоичный массив каждый раз. Я пробовал itertools.permutations и multiset_permutations, но, похоже, это не работает. Мой компьютер выходит из строя. Я думаю, что для создания всех комбинаций в списке требуется слишком много памяти? Но не уверен в этом