#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
Я уже пробовал использовать
- itertools.permutations
- multiset_permutations из scypy
Однако itertools не распознает одинаковые значения. И для обеих версий мне сначала нужно сгенерировать список со всеми комбинациями, что невозможно для такого большого количества комбинаций.
Комментарии:
1. Здравствуйте, просто чтобы уточнить, ваш код работает нормально, но вы хотели бы знать, есть ли лучший способ сделать это с помощью
itertools.permutations
ormultiset_permutations
?2. Вы можете использовать рекурсию.
3. Я хотел бы ускорить код, поэтому я хочу избежать преобразования десятичного числа в двоичный массив каждый раз. Я пробовал itertools.permutations и multiset_permutations, но, похоже, это не работает. Мой компьютер выходит из строя. Я думаю, что для создания всех комбинаций в списке требуется слишком много памяти? Но не уверен в этом